hopper 逆向分析 010 editor 授权过程
本帖最后由 goodboy_wkx 于 2017-5-1 23:07 编辑分析木马也好,分析漏洞也好,分析收费程序的授权机制也好,都像是警察破案。
通过一些蛛丝马迹的线索不停的追踪、调查,然后会不断的有新的线索出现。
但是如果不顺利的话,很可能会发现自己之前的线索断了,这时就得重新寻找线索。
不管怎样,都要把最终的真相找到。我觉得这才是作为逆向分析爱好者的乐趣所在。
1、实验环境
操作系统: mac os x 10.12
调试工具:hopper disassemble v4
程序:010 editor for mac
官网地址:http://www.sweetscape.com/010editor/
2、开始分析
2.1、寻找线索
看一下正常执行时的整个流程,并从中获得线索。
在关于里面找到注册然后弹出注册的信息框,输入用户名和密码,点击 check license,然后提示 “Invalid name or password…….”,如图-1。
现在找到了第一条线索,记为线索1。线索1:stringInvalidNameOrPassword字符串“Invalid name or password…”。
图-1
2.2、分析线索1
打开 hopper disassembler v4,将010editor 拖拽到hopperdisassembler上,如下图:
通过hopper中的字符串查找定位到stringInvalidNameOrPassword出现的位置,如图-2。
图-2
再查看stringInvalidNameOrPassword在哪些地方被引用了。
选中stringInvalidNameOrPassword所在地址,按一下“X”键,显示出该地址的所有引用,如图-3。
图-3
双击图-3中的地址,即可显示出该调用地址处的反汇编代码,如图-4。
接下来就要分析 sub_1002e5f10 这个函数。到这里,我门又有了新的疑点:
1、 stringInalidNameOrPassword这条路是从哪里走过来的?
2、 该函数中有没有正确的路?如果有,哪么正确的路在哪里?
3、 正确的路与stringInalidNameOrPassword的路是在哪里走岔的?
上面的三个疑点都在 sub_1002e5f10 函数中找。
图-4
光标放在1002e69e4 处,然后点击工具栏中的CFG module 显示函数流程图如图-5。
图-5
总的来说loc_1002e6900 是一条错误的路(trial+invalidNameOrPassword)。
再找loc_1002e6900 的来源,如图-6。
图-6
再向上找,找 loc_1002e65b8 的来源,如图-7。可以看到是在loc_1002e6363处和正常的授权路分岔了。
关键是 ebx的值,如果ebx == 0xdb 该函数就走授权的路。
现在用伪代码模式查看这块代码,如图-8。这时,我们定位到了三个重要函数 sub_1000c9230 sub_1000c90e0 sub_1002e9e40。
其中sub_1002e9e40函数是用来联网校验授权信息的,这里就不进入该函数分析来。
ebx 的值是 sub_1000c9230 的返回值,所以如果能控制sub_1000c90e0 的返回值就能控制该函数走授权的路了。
图-7
图-8
进入sub_1000c90e0 函数进行分析,如图-9。sub_1000c90e0 的返回值有 0x113, 0xdb, 0x20c, 0xed, 0x71, 0x177, 0xf9,0x2f共8种。
其中0xdb是走的授权路线。在该函数中调用了sub_1000c9230 函数,如果能控制 sub_1000c9230 的返回值为0x2d 就能让sub_1000c90e0返回 0xdb。
其实为了保险起见可以将 sub_1000c90e0 函数中的第三行 rax = 0x113改成rax = 0xdb。这样就能保证 sub_1000c90e0 返回的是 0xdb。
图-9
函数分析sub_1000c9230。
先来查看该函数的所以引用。
00000001000c9106 call sub_1000c9230 ;在sub_1000c90e0 函数中。
00000001002e62f2 call sub_1000c9230 ;在sub_1002e5f10 函数中。
没有授权时,在sub_1002e5f10返回的是0xe7,在 sub_1000c90e0中返回的不是 0x2d。
函数sub_1000c9230的返回值有rax= 0x93, 0xe7, 0x2d,0x4e四种,每个返回值都有自己的特殊含义。
其中0x2d就是走授权道路的返回值;0x93 是tial 或者 Invalid name or password。
修改 sub_1000c9230函数使其只返回0x2d,我的修改方式是将
00000001000c9268 mov r12d, 0x93
00000001000c926e cmp dword , 0x0
00000001000c9272 je loc_1000c9552
修改成
00000001000c9268 mov r12d, 0x2d
00000001000c926e cmp dword , 0x0
00000001000c9272 jmp loc_1000c9552
00000001000c9277 nop
参照图-7,将sub_1002e5f10 函数中的
00000001002e631c je loc_1002e6363
修改成
00000001002e631c jne loc_1002e6363;目的是绕过sub_1002e9e40网络验证。
通过线索1,我们找到来正常授权的路,线索1的路也走完了。保存修改。
运行修改后的文件时,提示图-10
图-10
2.3寻找新线索
其实在提示图-10窗口之前有个窗口一闪而退,那个窗口提示的是什么哪?
通过录像的方式录下来然后慢放暂停。其实那个提示框是图-11。
现在我们又找到了新的线索(2条)。
线索2: stringLicensedTo = “Licensed to:”
线索3: stringInvalid license=“Invalid license”。
2.3.1分析线索2
线索2:stringLicensedTo = “Licensed to:”通过字符串查找并锁定到引用函数,分析函数流程如图-12。修改成如图-13。
图-11
图-12
图-13
2.3.2分析线索3
线索3: stringInvalid license=“Invalid license”。通过字符串查找并锁定到引用函数为sub_1002e7620。分析函数 sub_1002e7620 流程如图-14
图-14
简化一下如下:
if (eax > 0xda)//loc_1002e782a
{
if (eax > 0x20b)//1002e78b2
{
if ( eax != 0x20c)//1002e7b0f
{
goto 1002e8413;
}
else
{
Upgrade Required
}
}
else
{
if( eax > 0x176)
{
goto 1002e7b73;//Evaluation
}
else
{
if(eax > 0x112)
{
if(eax != 0x113)//1002e7da4
invalid license
else
days left
}
else
{
if(eax == 0xdb)
goto 1002eb295;//OK registered
else
envaluied version
}
}
}
}
else if(eax != 0x2f)
{
goto 1002e8413;//Evaluation Version
}
else
{
Bad Clock Dat;
}
可以修改成
if (eax > 0xda){
goto 1002eb295;//OK registered
}
else
{
goto 1002eb295;//OK registered
}
即
00000001002e782a mov eax, dword ; CODE XREF=sub_1002e7620+487, sub_1002e7620+501
00000001002e7831 cmp eax, 0xda
00000001002e7836 ja loc_1002e78b2
修改成
loc_1002e782a:
00000001002e782a mov eax, dword ; CODE XREF=sub_1002e7620+487, sub_1002e7620+501
00000001002e7831 jmp loc_1002e8295
00000001002e7836 nop
00000001002e7837 nop
3、破解后的文件
破解后的文件以上传到52破解上了,地址:http://www.52pojie.cn/thread-604569-1-1.html
哇 前排支持楼主! Hopper Disassembler是苹果系统用的反编译工具把,那你安装的010 editor也是苹果系统版本的吗?哦,仔细看了一下文章,还真是哦 厉害厉害厉害 目测要火 前排占位 感谢楼主分享,学习了, 破解,用了一天,整理图片,整理逻辑,还要整理帖子的格式用了半天 谢谢分享!看看吧可能需要呢 感谢楼主分享{:301_993:} 收藏了。谢谢分享
谢谢分享!