VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 4174|回复: 7

[技术文章] 【新手向】OD破解CRC验证=>Patch String&Nags

[复制链接]
Miss丿小沫 发表于 2016-7-7 11:08:17 | 显示全部楼层 |阅读模式
本帖最后由 Miss丿小沫 于 2016-7-7 11:23 编辑

本人也是新手小白,最近在学OD反汇编之类,写个帖子,分享一下自己破解的过程,也算总结一下自己的经验。好了,废话不多说,上教程!
本次破解用到的【Unpackme】

本人也是小白,如果教程里面有不清楚的或者错误的地方,欢迎大牛们指正!!!

我们的目的:
我们要修改弹出的Messagebox中的Text和主窗口里面的Text(直觉告诉我不可能很简单。。。)

首先,OD载入:

老思路,Search for -> All Referenced text strings
【呵呵~~~】当然找不到指定字符串啦。。。加密过了(所以不可能这么简单。。。)

来分析代码流程:
进来就是EP(EnterPoint)代码处,(代码很简洁,猜测是汇编写的。。。)
我们的目标是找到 OEP(原始程序入点)

第一行就是pushad,明显的加密标志(运行时压缩)!
第二行一个Call
第三行retn

好,F7跟进Call里面看看。

又看到一个Call,继续跟进看看!

在这个部分,看到了两个循环(XOR)和两个Call,猜测应该就是解密部分了,F7单步调试



看这两行
第一行起始地址为 4010f5
第二行循环次数在ecx里面 0x154
inc自加运算
好,由这两行和循环可知道,这重循环解密 4010f5 ~ 401248部分
解密循环中 XOR 44 解密

F2断点,F9运行跳出循环(这都会吧。。)
紧接着下面又有一个Call,F7进入
跳到 4010BD(就是下面那个循环部分)

同理 F7单步

和上面一样,循环计数器放在ecx里面,循环0x7F次
起始地址为 401007 计算器算一下 末地址为 401085
inc自加运算
循环解密部分为 401007 ~ 401085
解密中用 XOR 7 解密
OK,跳出循环
紧接着下面还有一个循环

起始位置在 EAX里面 查看寄存器可知 起始位置为 4010f5
循环次数ecx为 0x154
inc自加运算
可得 解密 4010f5 ~ 401248部分
XOR 11解密
下面就RETN了。

看来到此,解密就应该完了。
OK,总结一下上面,理一下流程:
总共有三个解密循环,列举一下:
①:解密 4010f5 ~ 401248 XOR 44
接着一个Call,里面有两个for解密:
        ②:解密 401007 ~ 401085 XOR 7 解密
        ③:解密 4010f5 ~ 401248 XOR 11解密

诶~~等一下,第一个和第三个解密同一个内存块(4010f5 ~ 401248)
看来是双重加密啊~~~

OK,RETN回来
进入第二个Call

看到两个 ASCII,很明显了,是CRC验证

直接断点在这里,一个cmp,CRC
什么是CRC? 简单地说,就是程序会检测它自己的代码,经过计算出一个值,然后和31EB8DB0比较 cmp这一行,
也就是说 你不能在代码中直接爆破修改代码,这样会导致CRC验证失败,然后jmp到错误信息框,即“CrC of this file has been modified !!!”
程序非正常退出。

好,先记一下这里,继续F7单步调试!

到了这一步,JMP就到了我们的OEP,即原始程序入点。

JMP过来你的OD可能这样显示,此时 右键->Analysis->Remove.....

这样显示就OK了

这就到了我们的入口函数(OEP) 40121e
滚轮向上翻一下,就会看到已经解密出来的字符串信息,我们需要修改的就是 这两个字符串

字符串地址:4011b6
                     4011bb
然而我们不能直接修改,原因上面已经说过了,字符串在加密区域里面,而加密区域需要CRC验证,所以要另辟蹊径。
我们先来看一下代码流程:
先来到EP
然后三个for解密循环
CRC验证
来到OEP
显示字符串

OK,思路就是构建 Cave code(巢穴代码)(做过绕过驱动保护的会深有体会)
我们JMP OEP的时候,修改这行代码,写成 JMP 0xXXXXXX
跳到我们自己的代码区域,称为 Cave code,在我们自己的代码中修改字符串信息,因为此时已完成解密
OK 找到方法后就开始吧!

回到401083处,JMP到Cave code
等等~ 注意一下
401083 也在我们的解密循环(XOR 7)里面,我们修改代码的时候也要是解密形式的,虽然此时已完成CRC验证,如果不改的话,会造成程序崩溃(自己猜测,没有试过。。)
找一段空白区域构造我们的Cave code
发现 401280一下就是空白区域了

OK,我们首先在401083处
修改为 jmp 401280

获取机器码为E9 F8 01
然后 进行解密
E9                 EE
F8    XOR 7   FF
01                 06
新的机器码 EE FF 06
在401083处 Ctrl + E 编辑机器码 为 新的机器码


再来到我们的Cave code
编辑修改字符串代码

先罗列一下信息(可以在Dump里面看的)
0040110A  59 6F 75 20 6D 75 73 74 20 75 6E 70 61 63 6B 20  You must unpack
0040111A  6D 65 20 21 21 21                                                     me !!!
22个字节
00401123  59 6F 75 20 6D 75 73 74 20 70 61 74 63 68 20 74  You must patch t
00401133  68 69 73 20 4E 41 47 20 21 21 21                            his NAG !!!
27个字节

尽量离401280远一点,给赋值代码留出足够空间
我们在4012AE处添加我们要修改的字符串1(Dump里面修改都会吧,不会的话回帖,我会回答的)
004012A4  49 20 43 41 4E 20 50 41 54 43 48 20 59 4F 55 20  I CAN PATCH YOU
004012B4  48 41 48 41 21 00                                                    HAHA!.
22字节
我们在4012C4处添加我们要修改的字符串2
004012BA  49 20 41 4D 20 45 4C 49 4F 54 20 51 51 3A 31 31  I AM ELIOT QQ:11
004012CA  36 31 31 34 32 35 33 36 21 21 00                            61142536!!.
27字节

字符串必须以00结束!
也就是NULL,否则会崩溃的。。。。

好了来编写代码
在401280处编辑代码,一行一行的输入进去。。
mov ecx,0x16
mov esi,0x4012AE
mov edi,0x40110A
rep movs byte [edi],byte [esi]
mov ecx,0x1B
mov esi,0x4012C4
mov edi,0x401123
rep movs byte [edi],byte [esi]
jmp 0x40121E

OK,我们来解释一下这段asm
计数器ecx里面存计数器,表示要复制的字节数 byte
edi里面放 程序的字符串
esi里面放 我们的字符串
然后 rep movs修改!
OK
来看成果吧


做到这里了吗?!
是不是很有成就感,这就是很简单的 CRC加密了!

希望大家自己动手分析一遍!

恳请SYC大哥加精!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入驿站

x

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
xiaoji + 1 + 1 很好不错哦

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

libocdf 发表于 2016-7-12 10:10:31 | 显示全部楼层
不错啊,顶一下!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

jingjinghack 发表于 2016-7-12 10:37:27 | 显示全部楼层
学习了,赞一个~

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

NOW派大星 发表于 2016-7-15 10:31:18 | 显示全部楼层
去掉CRC可以把改成 CMP EDX,EDX  ,这样不就过了CRC么?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

2191265529 发表于 2016-8-20 19:28:58 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

vc_vip 发表于 2016-8-20 21:11:33 | 显示全部楼层
看不懂啊,看开汇编基础还不是很好啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

fjqisba 发表于 2017-3-14 15:33:05 | 显示全部楼层
简单的压缩壳,直接脱掉就OK了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

凶狠的小白免 发表于 2017-8-30 22:05:06 | 显示全部楼层
高手                                      .

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站

本版积分规则

展开

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )

返回顶部
x

VC驿站微信公众号cctry2009

GMT+8, 2017-10-21 23:43

Powered by Discuz!

© 2009-2017 cctry.com

快速回复 返回顶部 返回列表