发表于 2019-6-24 19:16

申请会员ID:zyjsuper【申请通过】

1、申 请 I D:zyjsuper
2、个人邮箱:zyj_super2@163.com

3、原创技术文章:使用Radare2+Hopper破解Hopper Demo限制


声明:为方便各位破解爱好者使用Hopper,所以公布此文,此前未做任何公布。仅限个人使用,勿做商业用途,为更好的长期的使用Hopper,请做好保密工作。



软件版本:Hopper Disassember 4.5.11 Demo x86_64(4.5.12已测可过)
操作系统:Linux通用软件运行时会提示注册窗口,选择一个License文件注册,或者使用试用版。https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516112941048-530006735.png点击Try the Demo后,会进入软件页面,保存修改后的文件时会提示如下窗口,试用版不支持此功能。https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516112838358-155005026.png 使用Ghidra或者IDA查找"You cannot export a patched executable with the demo version" 这条信息,本人使用Demo版本的Hopper来做演示,以子之矛,攻子之盾。搜索“demo”字符串可以得到下面的结果。https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516115016185-792677788.png 右击右侧窗口对应的字符串地址,如图所示,选择“References to......”https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516115117122-1939228210.png得到下图的结果,表示此处调用该字符串,双击该地址自动跳转到该地址所在的汇编代码。https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516115227245-307443923.png代码如下:

12345678910111213141516171819sub_63dd48:000000000063dd48         lea      rdi, qword                          ; argument #1 for method j__ZN7QString16fromAscii_helperEPKci, "Error", CODE XREF=sub_63dd20+15000000000063dd4f         mov      esi, 0x5                                    ; argument #2 for method j__ZN7QString16fromAscii_helperEPKci000000000063dd54         call       j__ZN7QString16fromAscii_helperEPKci      ; QString::fromAscii_helper(char const*, int)000000000063dd59         mov      qword , rax000000000063dd5e         lea      rdi, qword          ; argument #1 for method j__ZN7QString16fromAscii_helperEPKci, "You cannot export a patched executable with the demo version"000000000063dd65         mov      esi, 0x3c                                 ; argument #2 for method j__ZN7QString16fromAscii_helperEPKci000000000063dd6a         call       j__ZN7QString16fromAscii_helperEPKci      ; QString::fromAscii_helper(char const*, int)000000000063dd6f         mov      qword , rax000000000063dd74         lea      rsi, qword                       ; argument #2 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd79         lea      rdx, qword                       ; argument #3 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd7e         mov      ecx, 0x400                                  ; argument #4 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd83         xor      r8d, r8d                                    ; argument #5 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd86         mov      rdi, rbx                                    ; argument #1 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd89         call       j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_ ; QMessageBox::critical(QWidget*, QString const&, QString const&, QFlags<QMessageBox::StandardButton>, QMessageBox::StandardButton)000000000063dd8e         mov      rdi, qword 000000000063dd93         mov      eax, dword 000000000063dd95         cmp      eax, 0xffffffff000000000063dd98         je         loc_63ddc2
使用"References to....."没有找到从何处跳转到该处,我们可以顺着该段代码向上分析,得到关键函数如下:在“je sub_63dd48”之前有一处函数调用“call sub_504550”

12345678910111213141516171819; ================ B E G I N N I N G   O F   P R O C E D U R E ================                     sub_63dd20:000000000063dd20         push       rbx                                       ; Begin of unwind block (FDE at 0x83ee14), Begin of try block, CODE XREF=sub_661720+339000000000063dd21         sub      rsp, 0x20000000000063dd25         mov      rbx, rdi000000000063dd28         call       sub_504550                                  ; sub_504550000000000063dd2d         test       al, al000000000063dd2f         je         sub_63dd48                                  ; sub_63dd48 000000000063dd31         mov      rdi, qword 000000000063dd35         test       rdi, rdi000000000063dd38         je         sub_63dd48+174 000000000063dd3e         add      rsp, 0x20000000000063dd42         pop      rbx000000000063dd43         jmp      sub_5b7ba0                                  ; sub_5b7ba0                        ; endp
双击"sub_504550"得到该函数的汇编代码如下:

1234567891011121314151617181920      ; ================ B E G I N N I N G   O F   P R O C E D U R E ================                     sub_504550:0000000000504550         push       rax                                       ; Begin of unwind block (FDE at 0x828a2c), CODE XREF=sub_5b7850+70, sub_5ecc10+1195, sub_637fc0+89, sub_637fc0+129, sub_63ca60+18, sub_63cf10+10, sub_63d640+8, sub_63d7a0+8, sub_63d900+8, sub_63da60+8, sub_63dbc0+80000000000504551         call       sub_5024e0                                  ; sub_5024e00000000000504556         cmp      eax, 0x30000000000504559         jne      loc_504565 000000000050455b         call       sub_502e70                                  ; sub_502e700000000000504560         call       sub_5024e0                                  ; sub_5024e0                      loc_504565:0000000000504565         dec      eax                                       ; CODE XREF=sub_504550+90000000000504567         cmp      eax, 0x2000000000050456a         setb       al000000000050456d         pop      rcx000000000050456e         ret                        ; endp000000000050456f         align      16
使用"References to..."可以查看到很多调用函数,这些函数都是以sub_504550的返回值作为判断依据, https://img2018.cnblogs.com/blog/1578668/201905/1578668-20190516120941449-1724875536.png返回到“sub_63dd20”这个函数,我们可以看到"test al,al   je sub_63dd48",只要sub_504550的返回值为1时,此处不跳转。那么我们将sub_504550修改成如下即可:

12345678          sub_504550:0000000000504550         mov      rax,0x1                                        ; Begin of unwind block (FDE at 0x828a2c), CODE XREF=sub_5b7850+70, sub_5ecc10+1195, sub_637fc0+89, sub_637fc0+129, sub_63ca60+18, sub_63cf10+10, sub_63d640+8, sub_63d7a0+8, sub_63d900+8, sub_63da60+8, sub_63dbc0+80000000000504551         ret                                                       ; sub_5024e00000000000504556         cmp      eax, 0x30000000000504559         jne      loc_504565 000000000050455b         call       sub_502e70                                     ; sub_502e700000000000504560         call       sub_5024e0      <br>..........
在0x00504550这个地址处点击"alt+a",直接顺序输入mov rax,0x1 和 ret即可完成修改以下是使用radare2的修改方法。# r2 -Aw /opt/hopper-v4/Hopper> wa mov rax,0x1 @ 0x00504550> wa ret @ 0x00504557
使用r2pipe完成代码如下:(pip install r2pipe时有报错,有其他方案可以安装,此处不做赘述)

123456789import osos.system("pip install r2pipe")import r2pipeos.system("cp /opt/hopper-v4/bin/Hopper /opt/hopper-v4/bin/Hopper.backup")r2 = r2pipe.open("/opt/hopper-v4/bin/Hopper",['-w'])r2.cmd("wa mov rax,0x1 @ 0x00504550")r2.cmd("wa ret @ 0x00504557")r2.cmd("quit")os.system("/opt/hopper-v4/bin/Hopper")

Hmily 发表于 2019-6-25 18:09

你这个是惨目忍睹啊,从哪复制过来的,没法看。

筱沫 发表于 2019-6-26 04:47

笑死我了

NewsJai 发表于 2019-6-26 16:59

201 发表于 2019-6-25 21:24
没有“惨目忍睹”这个成语,正确的是“惨不忍睹”
(强迫症犯了。。。)

http://www.baike.com/wiki/%E6%83%A8%E7%9B%AE%E5%BF%8D%E7%9D%B9

FleTime 发表于 2019-6-26 17:10

NewsJai 发表于 2019-6-26 16:59
http://www.baike.com/wiki/%E6%83%A8%E7%9B%AE%E5%BF%8D%E7%9D%B9

{:301_985:}我怎么没搜到这个词。。

神来了 发表于 2019-6-26 21:14

Hmily 发表于 2019-6-25 18:09
你这个是惨目忍睹啊,从哪复制过来的,没法看。

这评论扎铁了啊老心

发表于 2019-6-27 15:13

十分抱歉,头一次发帖,也不知什么情况,格式就变成惨不忍睹的样子,重新回复下,希望大家能看清。1、申请 I D:zyjsuper2、个人邮箱:zyj_super2@163.com3、原创技术文章:使用Hopper+Radare2去除最新版Hopper For Linux的试用版功能限制,希望在此和各位大大们交流学习各项功能均可以正常使用,去除水印,更改领版本信息,有问题欢迎大家论坛交流,不才欢迎大神赐教。 声明:本文仅限个人交流使用,勿做商业用途。软件版本:Hopper Disassember 4.5.11 Demo x86_64(4.5.12已测可过)操作系统:Linux通用软件运行时会提示注册窗口,选择一个License文件注册,或者使用试用版。blob:https://www.52pojie.cn/806c4e1b-0eca-4a68-afdc-381608b964e4点击Try the Demo后,会进入软件页面,保存修改后的文件时会提示如下窗口,试用版不支持此功能。blob:https://www.52pojie.cn/f60c1d5d-f6cc-47eb-832e-c3b4ccb428a5 使用Ghidra或者IDA查找"You cannot export a patched executable with the demo version" 这条信息,本人使用的是破解后的Hopper来做演示,以子之矛,攻子之盾。搜索“demo”字符串可以得到下面的结果。blob:https://www.52pojie.cn/0a629016-ffa8-40d7-ae47-5b591ecb5654 右击右侧窗口对应的字符串地址,如图所示,选择“References to......”blob:https://www.52pojie.cn/d8f28bd7-7ac7-4c4b-8336-91ab17a9306a得到下图的结果,表示此处调用该字符串,双击该地址自动跳转到该地址所在的汇编代码。blob:https://www.52pojie.cn/7a82f117-d1cb-467e-b361-f8c04b7583fd代码如下:blob:https://www.52pojie.cn/3c836251-d46f-4091-a60a-8d369ba0b2bf使用"References to....."方法查找该代码所在函数的上级调用,即直接在函数名称“loc_63dd48”右击选择“References to.....”功能,找到如下代码:blob:https://www.52pojie.cn/e689a817-d203-4cc0-aeba-b520d97a12cd使用Hopper的“Show Pseudo Code of Procedure”功能可以将上述代码所在的过程解析成可读代码如下:blob:https://www.52pojie.cn/2dae453b-9fa0-4687-9f93-a90ad05839c7由解析后的代码我们可以轻松判断出,如果函数"sub_504550"的返回值为0时,程序就会跳转到“You cannot export....”这段信息所在的函数,所以我们需要将函数"sub_504550"的返回值设置为非0值,达到去除此功能限制。点击函数名"sub_504550",进入到该函数内部,得到代码如下,代码分析能力较强到童鞋可以分析下这个函数,其内部调用了3个函数都比较复杂。但此处我们只需要将函数"sub_504550"的返回值手动更改为1即可达到我们想要的结果。 blob:https://www.52pojie.cn/b07aa197-f805-4b76-9ec9-3bd263ec3406切换函数到反汇编代码如下:右击该函数名,我们可以看到很多调用,更验证了此函数是各项功能判断到重要函数,也是逆向到关键。(希望官方看不到此文,嘻嘻^_^)blob:https://www.52pojie.cn/f7e214a1-0c85-40b0-a852-712f7f57ab6c在函数sub_504550起始位置,即"push rax"处点击"ALT+a"组合键即可进入编辑模式,输入代码后回车继续编辑。blob:https://www.52pojie.cn/05ddb3e5-6d57-4e59-8470-b8d454a90f9d再输入一个'ret'然后退出编辑。导出更改后的程序如下图所示:可以点击ctrl+shift+e或者从菜单中选择“Produce New Excutable...”.blob:https://www.52pojie.cn/c29e2a63-f9c6-4d0b-b2fa-c2226212f061
以下是使用radare2的修改方法:
# r2 -Aw /opt/hopper-v4/Hopper
[0x00504550]> wa mov rax,0x1 @ 0x00504550[0x00504550]> wa ret @ 0x00504557
使用r2pipe完成代码如下:blob:https://www.52pojie.cn/e911666b-ae35-483e-b580-ef0d8b825d50#!/usr/bin/env python2import osos.system("git clone https://github.com/radare/radare2-r2pipe")os.system("cd radare2-r2pipe/python")os.system("python2 setup.py install")os.system("pkill hopper")import r2pipeos.system("cp /opt/hopper-v4/bin/Hopper /opt/hopper-v4/bin/Hopper.backup")r2 = r2pipe.open("/opt/hopper-v4/bin/Hopper",['-w'])
# Set rax to 0x1.r2.cmd("wa mov rax,0x1 @ 0x00504550")r2.cmd("wa ret @ 0x00504557")
# Remove "Demo Version" for watermask and version info.r2.cmd("w0 13 @ 0x0067b5c0")r2.cmd("w CrackByZayki@ 0x0066580b")r2.cmd("quit")os.system("/opt/hopper-v4/bin/Hopper")blob:https://www.52pojie.cn/e911666b-ae35-483e-b580-ef0d8b825d50

Hmily 发表于 2019-6-27 18:19

游客 58.21.116.x 发表于 2019-6-27 15:13
十分抱歉,头一次发帖,也不知什么情况,格式就变成惨不忍睹的样子,重新回复下,希望大家能看清。1、申请 ...

我想问你从哪复制过来的?有原始地址吗?

发表于 2019-6-28 08:53

Hmily 发表于 2019-6-27 18:19
我想问你从哪复制过来的?有原始地址吗?

没搞清楚怎么回事,预览都正常,就是发送上来就有问题,我把博客链接发给您吧,临时的,等审核了就删了。
https://www.cnblogs.com/heycomputer/articles/11100762.html

Hmily 发表于 2019-6-28 10:44

I D:zyjsuper
邮箱:zyj_super2@163.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

PS:过程有些简单,鉴于原创给予过了,报道后把文章发到脱壳破解区,论坛发帖可以点击发帖页面右上角的源代码模式进行粘贴,就不会有乱码,图片最好上传本地,防止盗链。
页: [1] 2
查看完整版本: 申请会员ID:zyjsuper【申请通过】