本帖最后由 Sound 于 2016-10-19 22:10 编辑
大吾爱竟然没有介绍通杀技术的帖子。。。。。。。。。。。。。。。
伸手党也不要来了,这里并没有打包通杀补丁,仅仅给新人一些启发,大牛请绕道
初亦泽之软件通杀教程第一课通杀的基本原理与方法
这一课我们讲简单程序的通杀方法
通杀的关键在于特征码的总结,然后就是对特征码的处理 基本知识 一、常量 在汇编中,在编程时就已经确定、而且不可以再更改的数据,可以理解为常量,常量一般为立即数,它的数值是指令代码的一部分,在存储单元与寄存器中的数值是内存变量。 在汇编代码中,常量的出现方式可以为多种, 如 立即数到存储器的数据传送 示例: MOV ax,25 的25,代表直接数值 也可以用Dec、ascii etc 格式代替,也可以用过通过数值返回算符或常量表达式生成常量,数值返回算符, 如OFFSET等都可以用于产生立即数,所以用它们组成的表达式也是常量。如 MOV SI,OFFSET DATA1 ,源操作数OFFSET DATA1 是在汇编中直接表达并确定其值的常量。 常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,‘a’‘b’为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。这个flag往往是程序验证的关键所在 二、变量 变量会在程序执行过程中随着程序运行的条件改变而动态的发生改变,例如一个收费程序有注册和未注册两种状态,程序的注册状态就是变量的一种。一般变量需要进行初始化,也就是要给变量预先设定一个初值。程序一般先将初始化的值设置为未注册,再通过验证的子程序来判断是否给程序注册状态这个变量赋予新值。 三、地址码 指令存放的地址,你打开od之后反汇编窗口最左侧那些十六进制数就是地址码 四、操作码 OD反汇编窗口中地址码右侧那一列就是操作码(也就是常说的逆向工程中的特征码),操作码中分为指令代码和偏移地址,以及常量
逆向工程中常用的有这些(常见但不常用的没有列出,欢迎补充) 常用的指令代码 :long型: JNZ 0F85 ;JE 0F84 short型: jnz 85 ;je 84 jnb: 73 ;jge 7d ;jmp eb ;cmp 66 空操作 :NOP 90 对相同验证或者类似验证方式的软件,其操作码中的指令代码往往是不会改变的,而偏移地址却会不同,这些变化的部分我们可以用??代替,不变的可以直接保留下来 实战 五、所用工具 1.吾爱破解专用OD(目测是最好用的吧,不要比谁强谁弱,好用才是硬道理) 2.PEID或EXEINFO 3。DIE64 4.通用特征码替换工具 六、实战某系列软件的通杀 1、观察此系列软件的验证方式 软件1:
软件2:
软件3:
我们可以发现软件验证方式基本一致,应该可以实现系列通杀以及版本通杀
2、查壳查语言(时间所限不演示了)VB,无壳 3、OD载入第一个程序,右键,搜索字符串注册码
我们可以发现有一个跳转跳过了成功而指向了失败
跳转成功是关键跳上面比较的结果,所以,关键特征码应该是这两行代码 0050F0B1 . 66:837D CC FF cmp word ptr ss:[ebp-0x34],0xFFFF 跳转的原因 0050F0B6 . 0F8561030000 jnz PDFcombi.0050F41D 关键跳 我们将其nop掉,保存再注册后发现是已注册版本,所以,我们确定这就是关键特征码
我们右键- 二进制-二进制复制便得到了 软件1的关键特征码:
66 83 7D CC FF0F 85 61 03 00 00
同理。我们再得到2、3的关键特征码
软件1的关键特征码: 66 83 7D CC FF 0F 85 61 03 00 00 软件2的关键特征码: 66 83 7D CC FF 0F 85 20 03 00 00 软件3的关键特征码: 66 83 7D C4 FF 0F 85 A8 03 00 00 66 83 7D CC FF 0F 85 9D 03 00 00 66 83 7D C0 FF 0F 85 92 03 00 00 66 83 7D C8 FF 0F 85 87 03 00 00 我们对比一下看看哪里有不同的地方不同的地方我们用 ?? 来代替 我们就可以提取到这个特征码 :6683 7D ?? FF 0F 85 ?? 03 00 00 为什么??的地方会不同呢,这是因为那是偏移地址,或者是动态的跳转偏移, 对不同的软件一般是不一样的,而那些不变的部分,是指令代码,或者是全局常量 是不会改变的 根据我们上面学到的知识 常用的指令代码 :long型: JNZ 0F85 ;JE 0F84 short型: jnz 85 ;je 84 jnb: 73 ;jge 7d ;jmp eb ;cmp 66 空操作 :NOP 90 所以我们还可以再精简一下 :66?? ?? ?? FF 0F 85 ?? ?? ?? ?? 这就是我们所需要的通杀特征码,如果软件作者不更改验证机制,那么理论上仍然支持其同系列已经后续升级版本的破解 我们将具有这些特征码的地方全部nop掉就可以完成破解 即:90 90 90 90 90 90 90 90 90 90 90 注意修改后长度一定要相等 总结;通杀特征码:66 ?? ?? ?? FF 0F 85 ?? ?? ?? ?? 补丁特征码:90 90 90 9090 90 90 90 90 90 90
我们用通用特征码替换工具制作成通杀补丁试试
填一下这些内容,我们点设置补丁内容,
程序名就填1.exe吧,因为其同系列软件主程序的名字都不一样, 这样,通杀时我们只需要将其主程序名更改为1.exe即可 补丁方式选择补丁在特征码位置, 文件选择补丁单个文件 补丁所有特征码匹配打上勾 最后点添加 然后点保存 创建补丁
就得到了我们的通杀补丁
我们将其复制到待破解软件安装目录, 把主程序名字更改为1.exe试试 patch it
软件成功注册
再试试作者的其他软件?同样成功 教程到此结束 第一课程序比较简单,适合入门练习,第二课我会讲一个难一点的程序(字符串加密,加了一款不错的保护壳,利用HOOK技术实现破解。)
初亦泽 2016年10月19日
@Hmily,麻烦移到脱壳破解区,不知道为啥在那发不了贴了
|