|
本教程由热情洋溢的木木不哭赞助播出(“哎呀我摔倒了要漂亮姐姐亲亲才能起来 ”)
逆向前言:之前那篇教程没怎么做好,主要是家里出了点事,从今天开始就闲下来了,所以更有时间更细致地讲解,接下来几天视情况多发几篇图文,试试水,,,,
声明:
教程里的课件,大部分是别人的教程或者是有些人分享出来的,虽然是别人的课件,但是我不会讲跟别人一样的东西,否则就是抄袭,那不符合我做人的原则,,,我会讲的是我自己理解的
以及一些比较奇葩,比较另类的发现,也可以说是套路或者方法,像之前那篇文章我为什么会说没有做好,其实一个是我心里比较着急,没有认真做,第二个有些东西是我无意中发现的,可能不存在所谓的逻辑性,所以我不好讲我的结果是怎么得来的,总不能跟大家说我是瞎猫碰耗子吧?这会害人的,所以我没有去讲,其实是需要各位去发现,去理解,所以我一直强调的是,自己不动手,永远学不会!真理,永远需要自己去寻找,,,,在学习的过程中,要多问自己为什么?而不是问别人为什么!记住我这句话,,,,
逆向正文:
这个课件也是别人玩过的,我也是抱着学习的心态是调试了一遍,看看有没有什么是值得发现的,然后居然发现是一个E语言的程序,用的是注册文件型验证,把注册码放到一个文件
由程序特定的读取方式进行比对,挺有意思,所以发出来给大家说一下这种套路,逆向重启验证也是类似的方法,,,
载入OD,我们发现程序已经被加了压缩壳,这里,首先我要说明一点的是,我并不是很推荐大家用什么peid之类的东西,理由有两点:
1.简单壳,有脱壳机,不需要你手脱,知道这么个原理就行,反正脱壳的思路你也不知道是怎么得出来的,追寻更是浪费时间
2.加密壳,可能每天脱壳机,你手脱有可能自己没这个能力,那么纯属浪费时间,,,,
以上仅是我个人观点,不爽请跳过
由入口点可知这个是一个aspack,脱壳机自寻,脱完以后再把脱壳完毕的文件载入进OD,我们来找注册的地方
首先你要逆向它,那么必定要找到注册点,或者是功能处的缺损(未注册无法使用等限制),这里如果你了解这个程序是最好,不了解的话也没关系,等会搜字符串有可能会有发现
那么很明显,这里不是常规的套路,不使用注册码,使用注册码文件,到这一步,你所能想到的思路只能是在对比处,那么如何找到这个对比处呢?
函数:ReadFile 或 OpenFile 或 CreateFile
这三个函数都是跟读文件有关系的,(.ini可能除外,它有专门的函数)
这是目前位置我们能想到的方法之一,但是我这里不使用,为什么?如果大家有下过LoadLibraryA这个断点,你会发现,如果是有很多dll需要载入的话,他很难找到这个点,,所以抛弃之
接下来我上面提到了另外一个方法,找功能缺损处,或者说是限制,如果你不熟悉程序,那么我们来字符串找找,看是否会有发现
"亲爱的用户,软件注册后,将直接把此收据信息传递给打印机打印"
"注册后我才会离开,就是这么任性"
这两个点,共同处我们来看一下,看是否发现什么?
-----------------------------------------------------------------------------------------------------------------------cmp
发现:
00494FCA 83C4 04 add esp, 0x4
00494FCD 8B45 E8 mov eax, dword ptr [ebp-0x18] 非固定值(偏移)
00494FD0 83E0 01 and eax, 0x1
00494FD3 83F0 01 xor eax, 0x1
00494FD6 85C0 test eax, eax
0046F950 83C4 04 add esp, 0x4
0046F953 8B45 E4 mov eax, dword ptr [ebp-0x1C] 非固定值(偏移)
0046F956 83E0 01 and eax, 0x1
0046F959 83F0 01 xor eax, 0x1
0046F95C 85C0 test eax, eax
偏移结果来自:
0046F90B E8 2649FAFF call 00414236
经过此句代码以后,eax的值传递给了非固定的偏移
那么分析得出,这个call所代表的作用,其实是跟其他语言(如Delphi)地址常量是一样的作用
我们再来看这个call处的一些比较关键的代码 算法部分跳过,确实对算法不敢兴趣、、、
这里可以看出,他的代码没有用常规的判断,而是用了一个循环来进行判断,事实上这个写法我个人感觉还是挺好,
那么,在易语言当中,一般1代表为真,0代表为假,即eax=1为真,eax=0为假
当我们在这个jg下断,并点开菜单栏的软件注册时,这里被断下,说明这里是判断是否注册的点,
恰好这里jg是跳转是实现的,那么就是说他会执行mov eax,0 而不执行mov eax,1
综上:我们需要mov eax,1,才能使程序为注册版
得出分析方法:
1.修改JG为MOP
2.此call的段首处修改mov eax,1 retn 18
这里2方法是理由是:因为他这里应该是我们说的关键call,所以他兼计算+判断两个功能,所以计算方面我们就可以不要了,直接得出结果,retn 18是因为段首段尾要相对应,段尾是retn 18
所以在段首我们也要retn 18才不会出错,这个call是所有判断是否注册的关键处,也可以说所有功能是否限制都是从这里传递出结果,所以我们改这个call是一劳永逸的方法,,,
总结:
如果遇到类似的易语言型软件,我们可以通过找出功能限制的相同点来进行锁定关键call,并修改出正确值达到逆向的目的!
由于这个程序如果进行逆向传播可能涉及侵权问题,本人为了避免不必要的麻烦在此声明只做研究分析之用,不放出逆向版本以及软件,忘见谅!
程序名:电费管理系统2016旗舰版
|
评分
-
参与人数 23 | 威望 +1 |
HB +48 |
THX +14 |
收起
理由
|
禽大师
| |
|
+ 1 |
|
动动
| |
|
+ 1 |
|
lies
| |
+ 1 |
|
|
longge188
| |
|
+ 1 |
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
sjtkxy
| |
+ 2 |
+ 1 |
|
虚心学习
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
24567
| |
|
+ 1 |
|
Jawon
| |
|
+ 1 |
|
DDK4282
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意! |
Soul1999
| |
+ 1 |
|
|
boot
| |
|
+ 1 |
|
冷亦飞
| |
+ 1 |
|
|
消逝的过去
| |
+ 2 |
|
|
yexing
| |
+ 1 |
|
|
娄胖胖
| |
|
+ 1 |
|
zxjzzh
| |
|
+ 1 |
[吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少! |
我是好人
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守! |
叶落花开
| |
+ 2 |
|
|
sahacker
| |
+ 1 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
一个good而已
| |
+ 2 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
1906
| |
+ 1 |
+ 1 |
分享精神,是最值得尊敬的! |
公子世无双
| |
+ 1 |
+ 1 |
分享精神,是最值得尊敬的! |
Shark恒
| + 1 |
+ 30 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
查看全部评分
|