初亦泽之软件通杀教程第一课 通杀的基本原理与方法
本帖最后由 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型:jnz85 ;je 84 jnb: 73 ;jge7d ;jmp eb ;cmp 66 空操作 :NOP 90 对相同验证或者类似验证方式的软件,其操作码中的指令代码往往是不会改变的,而偏移地址却会不同,这些变化的部分我们可以用??代替,不变的可以直接保留下来实战五、所用工具 1.吾爱破解专用OD(目测是最好用的吧,不要比谁强谁弱,好用才是硬道理)2.PEID或EXEINFO3。DIE644.通用特征码替换工具 六、实战某系列软件的通杀 1、观察此系列软件的验证方式 软件1:
软件2:
软件3:
我们可以发现软件验证方式基本一致,应该可以实现系列通杀以及版本通杀
2、查壳查语言(时间所限不演示了)VB,无壳 3、OD载入第一个程序,右键,搜索字符串注册码
我们可以发现有一个跳转跳过了成功而指向了失败
跳转成功是关键跳上面比较的结果,所以,关键特征码应该是这两行代码0050F0B1 . 66:837D CC FF cmp word ptr ss:,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型:jnz85 ;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日
WORD版教程及课件:
@Hmily,麻烦移到脱壳破解区,不知道为啥在那发不了贴了
老大,我有不明白的地方——
为什么特征码要复制两行的二进制来组成,用一行的特征码不行吗?比如,
软件1的关键特征码: 66 83 7D CC FF 0F 85 61 03 00 00
能不能只用 0F 85 61 03 00 00关键跳这一行的特征码来修改,修改成0F 85 ?? 03 00 00或 0F 85 ?? ?? ?? ?? 进行通杀? Sound 发表于 2016-10-19 14:13
常量地方有部分错误 已帮修正, 写文章不宜, 论坛有这方面的文章,你没细心看。加个优秀。
感谢sound大指正! 涨知识啦,最喜欢这样的技术贴 感谢大大分享教程,辛苦了,研究一下去 技术贴,支持下 学习了,谢谢楼主 写得真好,很详细,大神辛苦了,感谢你花那么多时间来写教程 很不错的教程,菜鸟受益了,期待下一个教程 @Hmily 帮我移动到脱壳破解区吧,不知道为什么在那发不了贴了 来学习特征码通杀的基本原理与方法 脱壳破解区发不了贴?显示什么?