易语言破解类重启验证套路分析
本教程由热情洋溢的木木不哭赞助播出(“哎呀我摔倒了要漂亮姐姐亲亲才能起来{:5_187:}”)逆向前言:之前那篇教程没怎么做好,主要是家里出了点事,从今天开始就闲下来了,所以更有时间更细致地讲解,接下来几天视情况多发几篇图文,试试水,,,,
声明:
教程里的课件,大部分是别人的教程或者是有些人分享出来的,虽然是别人的课件,但是我不会讲跟别人一样的东西,否则就是抄袭,那不符合我做人的原则,,,我会讲的是我自己理解的
以及一些比较奇葩,比较另类的发现,也可以说是套路或者方法,像之前那篇文章我为什么会说没有做好,其实一个是我心里比较着急,没有认真做,第二个有些东西是我无意中发现的,可能不存在所谓的逻辑性,所以我不好讲我的结果是怎么得来的,总不能跟大家说我是瞎猫碰耗子吧?这会害人的,所以我没有去讲,其实是需要各位去发现,去理解,所以我一直强调的是,自己不动手,永远学不会!真理,永远需要自己去寻找,,,,在学习的过程中,要多问自己为什么?而不是问别人为什么!记住我这句话,,,,
逆向正文:
这个课件也是别人玩过的,我也是抱着学习的心态是调试了一遍,看看有没有什么是值得发现的,然后居然发现是一个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 非固定值(偏移)
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 非固定值(偏移)
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旗舰版
大家没事的时候也可以去想想,为什么他的硬件ID,或者说是机器码是乱码? 昨天晚上刚发布的时候看到了,孩子跟我捣乱,后来忘了操作置顶了{:5_188:} 学习理解提高 感谢分享,支持 感谢高手的教程 简单易懂,感谢老师精彩分析。 为了搞明白重启验证,对楼主的很多文章进行了学习,很佩服!今天的评分已经没了,下次补上!!!!