《黑客免杀攻防》读书笔记-软件逆向工程(6) switch-case分支

逆向工程实战:定位、Hook、跟值与混淆对抗四大核心技术解析 逆向工程是软件安全分析、漏洞挖掘和系统调试中的一项基础且关键的技术。其核心原理在于通过分析程序的二进制代码或运行时行为,理解其内部逻辑与数据流,从而实现对软件功能的深度洞察或修改。这项技术的核心价值在于能够突破源码缺失的限制,广泛应用于恶意软件分析、软件漏洞挖掘、第三方库调试、游戏修改以及软件兼容性研究等领域。在工程实践中,一套系统性的方法论至关重要,它通常围绕几个关键动作展开:首先是精准定位关键代码与数据,这需要结合静态分析与动态调试;其次是运用Hook技术拦截并修改程序执行流,现代工具如Frida极大地 阅读详情

1简单switch-case分支识别


sub eax,0

je


用eax-0代替cmp

当eax为0时,结果自然会使ZF置1。


A如果从1开始自增的case,用倒序减法跳转。

B如果从0开始自增的case,将不同case目标地址的值存储在相邻的数据段中,

用jmp  ds:[eax*4+0x??????]指令来跳转。

(这是数组寻址操作,即读取int型数组的操作)



2复杂一些的例子

A增强1.B中的例子:

从0开始的case,如果遇到列表中没有的case则该地址指向default。


3该分支结构与稀疏矩阵(间接表)

当“列表缺失”严重导致大量default时的一种解决方案。

(实际发现,编译器用if-else来识别这种情况汗)

本质是:用1字节来表示最小索引值与最大索引值之差不大于256的分支表。

movz  ecx,ds:byte_4010A8[eax]


4该分支结构与平衡二叉树

什么是AVL?虽然大体明白,但是不明白该算法。汗

平衡二叉树为:

(1)如果二叉树为空,返回真
(2)如果二叉树不为空,如果左子树和右子树都是AVL树并且左子树和右子树高度相差不大于1,返回真,其他返回假

继续晕

最小索引值与最大索引值之差大于256:

使用平衡二叉树表示。


理解switch-case语句的编译,主要是两种数据结构的应用。



LLVM代码混淆技术:从编译器原理到软件保护实战 代码混淆是一种通过语义等价变换增加程序理解难度的软件保护技术,其核心在于保持功能不变的前提下破坏代码的可读性和可分析性。从原理上看,混淆技术主要分为控制流扁平化、指令替换、虚假控制流和不透明谓词等类型,通过在编译器中间表示层面进行变换,能够有效对抗逆向工程和自动化分析工具。在技术价值上,相比传统的加壳和加密手段,基于LLVM的混淆方案具有平台无关、性能可控、与优化流程协同的优势,能够实现安全性与运行效率的更好平衡。应用场景涵盖商业软件保护、安全SDK开发、游戏反外挂和区块链智能合约编译等领域。本文以控制流扁 阅读详情

相关推荐

白盒AES加密实现:在不可信客户端环境下的密钥保护方案

AES(高级加密标准)作为对称加密的基石,其安全性依赖于密钥的保密性。在传统服务器环境中,密钥可通过安全存储进行保护,但在客户端环境(如移动应用、桌面软件)中,应用面临逆向工程与动态调试的“白盒攻击”风险,密钥极易暴露。白盒密码学通过将密钥深度编码至算法流程与查找表中,实现“算法与密钥合一”,使得即使攻击者完全控制运行环境,也无法提取有效密钥。这项技术为软件授权校验、本地敏感数据保护等场景提供了核心安全保障。本文聚焦于白盒AES的查表实现方案,解析其如何将标准AES轮操作转化为抗分析的查找表序列,并探讨在工

weixin_34007886的博客 354

代码逆向(五)——switch-case识别技巧提高

<br />我们前面为各位读者分别介绍了转成if-esle与利用跳转表两种优化模式,但是在最后我隐含着提出了一个问题,既如果我们的switch-case分支两个数之差大于50甚至更多的时候,那么我们此时是否仍需要利用跳转表来解决问题呢?很显然我们不能这样做,假如我们遇到如下这段代码:<br /><br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />    switch (argc)<br />    {<br />    case 0:<br />  

蛛丝 3901

探索热阻测试仪在半导体器件热管理中的应用与前景

T3Ster是MicReD研发的热测试仪,运用JEDEC稳态实时测试方法,专业测试分离或集成的双极型晶体管、MOS晶体管、常见的三极管、LED封装和半导体闸流管等器件的热特性。利用瞬态温升技术,可测得器件稳态热阻和温升,不但可以测得半导体器件稳态热阻和温升,而且可以直接测量各部分对于温升的贡献,计算芯片热流路径上的纵向热阻构成,对器件热可靠性设计、散热问题解决、产品性能提升和长期可靠性至关重要。关键词:T3ster,Micred,功率循环,结温测试,热阻测试,结温热阻测试,半导体热特性测试;

anscos_Olivia的博客 896

Win32反汇编(五)C/C++中的 if-else 与 switch-case 的正向分析与反向分析

前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用 Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令 Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转 Win32反汇编(四)栈的工作原理与堆栈.

浪子花梦 1339

基于Python的手语识别项目(简单版)

总之,看似简单的代码,实则花费了我不少的时间和精力,我曾无数次在深夜的灯光下,与代码为伴,只为了一点点优化,一丝丝提升。让我们一起,以尊重原创的精神,推动编程领域的发展,让这份热爱和技术的力量,照亮更多人的前行之路。模型的建立(---------------本人采用的是开源的asl-alphabet手势识别库,记得放在路径下--------------)current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!

lusen_j的博客 1966

超详细!动态规划详解分析(典型例题分析和对比,附源码)

为啥要使用动态规划?什么时候使用动态规划?以下是我的一些理解和心得,如果你感兴趣,就接着往下看吧。 对您有帮助的话记得给我点个赞哟! 动态规划的基本思想 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。 动态规划算法与分治法类似,其基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解中 得到原有问题的解。与分治法不同的是,动态规划经分解后得到的子问题

qq_44398094的博客 8万+

小甲鱼 OllyDbg 教程系列 (十一) : inline patch ( 内嵌补丁 )

小甲鱼 OllyDbg 视频教程:https://www.bilibili.com/video/av6889190?p=19 程序下载地址:https://pan.baidu.com/s/1u6SWgx83VWDwitNzxT2OXg 提取码:if41 PEiD 查壳工具:https://pan.baidu.com/s/1iNS4UlBvmXCxaj5a-AFupw ...

freeking101的博客 1218

手机相机基础技术解析:从硬件到算法的全面指南

手机相机的成像过程可简化为的链路,其核心硬件包括 镜头、CMOS传感器、ISP(图像信号处理器) 以及配套的软件算法。

weixin_44239603的博客 2448

【黑客免杀攻防】读书笔记10 - switch-case分支

0x1 switch-case分支 switch-case其实就是if-else语句的另一种体现形式。但大于3之后的switchc-case。编译器会对代码进行优化。 1.1 简单switch-case分支识别技巧 C源代码: int _tmain(int argc, _TCHAR* argv[]) { int nNum = 2; switch (nNum) { ...

weixin_30820151的博客 203

基于知识图谱的电影推荐系统——Neo4j&Python

也可直接从这里下载:链接: https://pan.baidu.com/s/1l6wjwcUzy5G_dIlVDbCkpw 提取码: pkq6。修改main.py中的driver,输入自己数据库的用户名与密码。系统会询问是否需要重新加载并创建知识图谱,在第一次时输入1。

weixin_46351593的博客 6356

基于Simulink的超级电容与锂电池混合储能协调控制仿真

摘要:本文介绍基于Simulink的光伏-混合储能系统(HESS)建模与仿真方法,通过超级电容和锂电池的协同控制实现功率平抑。系统采用直流耦合架构,利用一阶低通滤波法将总功率分解为低频(锂电池承担)和高频分量(超级电容承担),并设计SOC自平衡机制维持超级电容工作点。仿真结果表明,该方案可使锂电池电流波动降低62%,光伏功率波动率降至7.5%,有效延长电池寿命。文章详细展示了从主电路搭建、功率分配到闭环控制的完整实现步骤,为新能源系统储能优化提供实用参考。

amy_mhd的博客 136

CTF逆向工程实战:拆解混淆算法与心理博弈的完整攻防

逆向工程是分析软件内部工作原理的关键技术,其核心在于将编译后的二进制程序还原为可理解的逻辑。其基本原理是通过静态分析与动态调试,理解程序的数据流与控制流,从而揭示被隐藏的算法与功能。这项技术的价值在于软件安全评估、漏洞挖掘、恶意代码分析和兼容性开发等场景。在CTF竞赛与安全研究中,逆向工程常面临代码混淆的挑战,例如控制流平坦化和不透明谓词,这些手段旨在增加分析难度。本文以一道典型赛题为蓝本,深入探讨如何运用IDA Pro、Ghidra、GDB与Angr等工具链,识别并破解多重混淆,最终还原出清晰的加密算法与

weixin_34043301的博客 444

基于YOLOv11的工业装配完整性智能检测系统

在现代工业生产中,产品质量控制是确保企业竞争力的关键环节。其中,装配完整性检查——即检测产品是否安装了所有应有的部件,是质量检测中的重要一环。传统的人工检测方法存在效率低、易疲劳、主观性强等问题。本文提出了一种基于深度学习的目标检测算法YOLOv11的工业装配完整性智能检测系统,通过计算机视觉技术自动识别和验证产品装配的完整性。本文将详细阐述从数据准备、模型训练到系统部署的完整流程,提供可执行的代码实现,并介绍一个适用于该任务的参考数据集。

YOLO 552

C语言-04程序流程控制

条件分支 if 单分支 if (条件) { //复合语句 } 当条件语句为真的时候,符合语句才能被执行,如果条件为假的时候,符合语句不执行。 if else 双分支 if(条件) { //复合语句1 } else { //复合语句2 } 如果条件为真,执行复合语句1,否则执行条件语句2 #include <stdio.h> int main(int argc,c...

qq_30085229的博客 216

uniapp [全端兼容] - 详细实现下拉筛选菜单功能组件,下拉式筛选菜单效果,类似电商美团点击筛选项底部弹出列表点击选择后自动收起(详细示例代码,全端兼容小程序、安卓苹果app、h5网页、nvue

uni-app,vue2,vue3,向下弹出菜单包含筛选功能,日期筛选,下拉框选择器,下拉多条件筛选,下拉式筛选菜单,uniApp如何实现条件下拉筛选,Uniapp官方条件筛选组件,下拉框式条件筛选插件组件,最好用的插件组件,多端兼容,下拉菜单筛选,过滤筛选列表,下拉筛选栏,多列联动的条件筛选,下拉菜单地区和筛选,微信小程序,支付宝小程序,h5网页,移动端网站,安卓app,苹果app,nvue,uniapp所有平台兼容,下拉菜单筛选,下拉式条件筛选,下拉列表,点击排序,级联筛选,uniapp实现下拉筛选

🏆 前端领域优质创作者 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于LLVM的编译器级代码混淆实战:从原理到实现控制流扁平化

代码混淆是软件安全领域的一项关键技术,旨在通过改变程序的结构和逻辑,在不影响功能的前提下,大幅增加逆向工程的难度。其核心原理在于对程序的中间表示(IR)进行语义保持的变换,破坏静态分析和动态调试所依赖的可读性。这项技术的核心价值在于为高价值知识产权代码提供深度保护,尤其适用于安全产品、游戏反作弊和数字版权管理等对代码安全性要求极高的应用场景。本文聚焦于基于LLVM框架的编译器级混淆,通过实现控制流扁平化这一经典技术,手把手演示如何将程序的控制流图重构为复杂的“迷宫”结构,从而有效对抗自动化逆向工具,为C/C

weixin_33853794的博客 613

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从零开始掌握逆向分析:核心思想、工具链与实战拆解

逆向工程是一项通过分析可执行文件来理解其设计逻辑与实现原理的工程技术,广泛应用于软件安全、漏洞挖掘与恶意代码分析等领域。其核心在于‘由果推因’,即从编译后的二进制程序出发,还原其源代码级别的结构与算法。掌握逆向分析不仅能深入理解软件运行机制,更能提升安全研究、协议分析与算法还原等实战能力。学习逆向需要构建包括计算机体系结构、操作系统、编程语言与汇编在内的基础知识体系,并熟练运用静态分析工具(如Ghidra、IDA Pro)与动态调试工具(如GDB、x64dbg)。本文以CTF逆向题为切入点,通过实战演练一个

weixin_30598225的博客 375

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

练习Go语言-HTTP压力测试.md

压力测试HTTP服务端。比如看看你的电脑能同时建立多少长连接

KD的疯狂实验室 3415

你身边的自动内存管理器:std::string---轻松实现扩容,自动释放

使用 std::append()和std::assign()可以轻松帮助我们管理内存 而不只是字符串.

KD的疯狂实验室 3174

软件安全进阶书籍不完全推荐-更新中

推荐的书籍+教程,不一定是纸面上。 什么样的路径是比较适合你的进步呢? 相信后来者会和当年的我一样寻觅指引。 好事情是很多人已经跌跌撞撞完成了或部分完成了这个过程。 能清晰看到通向未来的道路的感觉真好。 以及当年执着地,盛夏在树林下读过的书。 记青春

KD的疯狂实验室 2002

msfencode的基本使用

简单介绍一下msfencode的使用

KD的疯狂实验室 1885

理想人生-从零开始成为一名反病毒工程师

什么是理想人生?......曾说:过上自己认为理想的生活,做出有益于社会的事. 你是否有志于成为一名反病毒工程师? 成为一名反病毒工程师.除了掌握最新安全动态.实践最新安全攻防手法和快速更新自我知识外,还需要一些基础

KD的疯狂实验室 1867

C++ 实现多线程快排

没想到多线程快排这么简单... 抛弃了分配,由各线程自己去竞争任务... 相当多的时间消耗在了锁上.... 多线程必须量大才能突出优势..比如超过500万

KD的疯狂实验室 1475

《黑客免杀攻防》第八章 PE文件知识在免杀中的应用

通过上一章对PE结构如此详实的

KD的疯狂实验室 1294

每日工作计划与实效情况

2014-10-29 今天是第一天, 明天的计划是

KD的疯狂实验室 1284
上一篇: 《黑客免杀攻防》读书笔记-软件逆向工程-5循环分支
下一篇: 目标识别器的设计-TargetMarker-1
dalerkd
博客等级 码龄14年 274粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值