吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7628|回复: 17
收起左侧

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

[复制链接]
吾爱游客  发表于 2019-6-24 19:16
1、申 请 I D:zyjsuper
2、个人邮箱:zyj_super2@163.com

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


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



[backcolor=rgba(255, 255, 255, 0.498039)]软件版本:Hopper Disassember 4.5.11 Demo x86_64(4.5.12已测可过)

操作系统:Linux通用软件运行时会提示注册窗口,选择一个License文件注册,或者使用试用版。
点击Try the Demo后,会进入软件页面,保存修改后的文件时会提示如下窗口,试用版不支持此功能。 使用Ghidra或者IDA查找"You cannot export a patched executable with the demo version" 这条信息,本人使用Demo版本的Hopper来做演示,以子之矛,攻子之盾。搜索“demo”字符串可以得到下面的结果。 右击右侧窗口对应的字符串地址,如图所示,选择“References to......”得到下图的结果,表示此处调用该字符串,双击该地址自动跳转到该地址所在的汇编代码。代码如下:[backcolor=rgba(255, 255, 255, 0.498039)]
12345678910111213141516171819
sub_63dd48:000000000063dd48         lea        rdi, qword [aError]                         ; 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 [rsp+arg_8], rax000000000063dd5e         lea        rdi, qword [aYouCannotExpor_685539]         ; 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 [rsp+arg_0], rax000000000063dd74         lea        rsi, qword [rsp+arg_8]                      ; argument #2 for method j__ZN11QMessageBox8criticalEP7QWidgetRK7QStringS4_6QFlagsINS_14StandardButtonEES6_000000000063dd79         lea        rdx, qword [rsp+arg_0]                      ; 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 [rsp+arg_0]000000000063dd93         mov        eax, dword [rdi]000000000063dd95         cmp        eax, 0xffffffff000000000063dd98         je         loc_63ddc2
使用"References to....."没有找到从何处跳转到该处,我们可以顺着该段代码向上分析,得到关键函数如下:在“je sub_63dd48”之前有一处函数调用“call sub_504550”[backcolor=rgba(255, 255, 255, 0.498039)]
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 [rbx+0x40]000000000063dd35         test       rdi, rdi000000000063dd38         je         sub_63dd48+174 000000000063dd3e         add        rsp, 0x20000000000063dd42         pop        rbx000000000063dd43         jmp        sub_5b7ba0                                  ; sub_5b7ba0                        ; endp
双击"sub_504550"得到该函数的汇编代码如下:[backcolor=rgba(255, 255, 255, 0.498039)]
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的返回值作为判断依据, 返回到“sub_63dd20”这个函数,我们可以看到"test al,al   je sub_63dd48",只要sub_504550的返回值为1时,此处不跳转。那么我们将sub_504550修改成如下即可:[backcolor=rgba(255, 255, 255, 0.498039)]
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[0x00504550]> wa mov rax,0x1 @ 0x00504550[0x00504550]> wa ret @ 0x00504557
使用r2pipe完成代码如下:(pip install r2pipe时有报错,有其他方案可以安装,此处不做赘述)[backcolor=rgba(255, 255, 255, 0.498039)]
123456789
import 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
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

我怎么没搜到这个词。。
神来了 发表于 2019-6-26 21:14
Hmily 发表于 2019-6-25 18:09
你这个是惨目忍睹啊,从哪复制过来的,没法看。

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

点评

我想问你从哪复制过来的?有原始地址吗?  详情 回复 发表于 2019-6-27 18:19
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:过程有些简单,鉴于原创给予过了,报道后把文章发到脱壳破解区,论坛发帖可以点击发帖页面右上角的源代码模式进行粘贴,就不会有乱码,图片最好上传本地,防止盗链。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-15 02:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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