手脱ACProtect v1.35(有Stolen Code)

本文详细介绍了一种针对ACProtect v1.35版本的逆向脱壳过程,包括使用PEID识别、OllyDBG(OD)调试设置及具体断点技巧等。通过多个关键步骤的实践指导,帮助读者理解并掌握从加载壳程序到最终脱壳的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.载入PEID

ACProtect v1.35 -> risco software Inc. & Anticrack Soft

2.载入OD,需要注意的是,异常选项除了[内存访问异常]外其他全部勾选上,然后shift+F9运行至最后一次异常,是1次之后。第二次程序就跑飞了

00436000 >  60              pushad                            ; //入口
00436001    7C 03           jl short QQ个性签.00436006
00436003    7D 01           jge short QQ个性签.00436006
00436005    71 0B           jno short QQ个性签.00436012
00436007    C2 66C1         retn 0xC166
0043600A    D29E FC4566D3   rcr byte ptr ds:[esi-0x2C99BA04],>
00436010    D27403 75       sal byte ptr ds:[ebx+eax+0x75],cl
00436014    0177 66         add dword ptr ds:[edi+0x66],esi

 

 

3.落脚点,落脚后右键点堆栈窗口SE句柄—数据窗口跟随—数据窗口第一行下内存访问断点然后shift+F9

00447B1F    CD 01           int 0x1                           ; //落脚点
00447B21    40              inc eax
00447B22    40              inc eax
00447B23    0BC0            or eax,eax
00447B25    75 05           jnz short QQ个性签.00447B2C
00447B27    90              nop
00447B28    90              nop

0012FF44   00447B03  SE处理程序     //堆栈窗口

00447B03  0C245C8B                  //数据窗口第一行

 


4.落脚点,在落脚点下F2断点,然后shift+F9

00447B03    8B5C24 0C       mov ebx,dword ptr ss:[esp+0xC]    ; //落脚点
00447B07    8383 B8000000 0>add dword ptr ds:[ebx+0xB8],0x2
00447B0E    33C0            xor eax,eax
00447B10    C3              retn
00447B11    64:67:FF36 0000 push dword ptr fs:[0]
00447B17    64:67:8926 0000 mov dword ptr fs:[0],esp

 

 

5.落脚点,继续在这里下F2断点,然后shift+F9运行

00447B53 8B048E mov eax,dword ptr ds:[esi+ecx*4] ; //落脚点

00447B56    8B5C8E 04       mov ebx,dword ptr ds:[esi+ecx*4+0>
00447B5A    2BC3            sub eax,ebx
00447B5C    C1C0 07         rol eax,0x7
00447B5F    33C2            xor eax,edx
00447B61    81C2 4B3DF129   add edx,0x29F13D4B

 

6.落脚点,先清除刚刚下的2个F2断点和1个内存访问断点,然后在最近的retn处F4

00447B67    89048E          mov dword ptr ds:[esi+ecx*4],eax    ; //落脚点
00447B6A    49              dec ecx
00447B6B  ^ EB E1           jmp short QQ个性签.00447B4E
00447B6D    61              popad
00447B6E    61              popad
00447B6F    C3              retn                                ; //F4
00447B70    0000            add byte ptr ds:[eax],al

 

 

7.在无StolenCode的帖子中已经说过,正常情况下接下来是在内存窗口的401000处下段然后shift+F9运行就可以到OEP了,但是我们这个壳你这样操作后会发现OEP处的代码好像不对劲,因为被抽取过了,我们要做的是点[调试]按钮—设置条件,或者使用快捷键ctrl+T,在弹出来的界面勾选最下面一个然后输入被偷取的代码,我使用的ximo教程里的壳,被偷取的代码为”push ebp”,输入完后点确定,然后使用快捷键ctrl+F11跟踪步入(或者点[调试]–跟踪步入)

8.找到了我们被偷取的代码,在这个壳中被偷取了三行代码,选中这三行,二进制复制

004254C8    61              popad
004254C9    55              push ebp                          ; //被偷取1
004254CA    8BEC            mov ebp,esp                       ; //被偷取2
004254CC    83EC 44         sub esp,0x44                      ; //被偷取3
004254CF    60              pushad
004254D0    60              pushad

55 8B EC 83 EC 44       //二进制复制出来的,一共6个字节

 


9.然后到内存窗口,在401000处下断F2,然后shift+F9运行来到假的OEP,向上找6个字节(看代码第二列,两位为一个字节),然后右键–二进制—使用nop填充,填充完毕后再数6个字节,然后使用二进制粘贴

004010D2    56              push esi
004010D3    FF15 E4634000   call dword ptr ds:[0x4063E4]      ; //假的OEP
004010D9    8BF0            mov esi,eax                       
004010DB    8A00            mov al,byte ptr ds:[eax]
004010DD    3C 22           cmp al,0x22
004010DF    75 1B           jnz short notepad9.004010FC
004010E1    56              push esi

 

 

10.此时OEP已经补充完整了,接着右键点’push ebp’哪一行—点[此处新建EIP]然后就可以脱壳了,脱壳注意[重建输出表]这一项不勾选,脱壳后使用ImportREC修复,我在脱壳的过程中出现过修复失败的情况,这种情况我一般都是用ImportREC上修复的插件或者别的版本的ImportREC来修复,可以都试试。

004010CC    55              push ebp
004010CD    8BEC            mov ebp,esp
004010CF    83EC 44         sub esp,0x44
004010D2    56              push esi
004010D3    FF15 E4634000   call dword ptr ds:[0x4063E4]      ; notepad9.0040D1BA
004010D9    8BF0            mov esi,eax                       ; kernel32.BaseThreadInitThunk
004010DB    8A00            mov al,byte ptr ds:[eax]
004010DD    3C 22           cmp al,0x22
004010DF    75 1B           jnz short notepad9.004010FC
004010E1    56              push esi

 


11.运行查壳

运行OK,查壳:Microsoft Visual C++ v6.0 SPx

转载于:https://www.cnblogs.com/JianXu/p/5158371.html

ACProtect是一个对Windows下的可执行文件提供保护的软件,可以非常有效的防止盗版。通过公匙加密算法(RSA)创建并校验注册KEY,只有在RSA KEY正确的情况下,才对那些受保护的代码进行正常解码。同时,ACProtect还使用了内嵌式加密,可以有效的防止加密软件从内存中被抓取,也就是无法被壳。内置反调试引擎,有效的增加了破解的难度。专用的API系统,可以使ACProtect和你的软件紧密的接合在一起,这样,你就可以通过使用ACProtect来创建你的全功能评估版。试想,你既可以让用户完全感受到你的软件给他们所带来的一切实用功能,又不用花费过多时间在加密保护上,这岂不是一个一举两得的完美方案? 主要特色 嵌入式加密系统 --- 你可以自行指定程序中所需加密的代码段,通过使用这个系统,那怕破解者知道你的程序的入口点(OEP)并且重建了输入表。 代码替换 ?--Acprotect在不影响软件功能的情况下,可以用ACProtect代码来替换你原程序中的某些代码,使得保护代码和被保护程序更加无缝的结合在一起。如果Acprotect被非法壳之后,软件就会由于部分代码无法正确还原而导致非法操作。 多态引擎--- 有效的动态变异,多态引擎产生多层解码代码,解码代码和被保护代码在你每次执行保护的时候都是变化的。可以有效对抗静态分析和动态跟踪。运行完毕之后,所有代码可以恢复到加密状态。 RSA 1024 License---通过使用RSA KEY系统,破解者无法在没有RSA密匙的情况下制作出你的软件的KeyGen,因为在通常情况下,RSA密匙只有作者本人知道。你同样可以决定,哪一些代码是需要通过RSA密匙来保护的,破解者根本无法获取你的“key.dat”。如果没有正确的KEY,受保护的代码将无法被正确解码。 API ---专用的API系统,外壳以及被保护程序可以被相互调用,从而使外壳和受保护的程序更加紧密地接合在一起。 反补丁/反载入--- 可以有效的防止你的软件被打上补丁/被装载,或者被反编译。 Anti-SoftIce --- 可以探测到Numega SoftIce (tm)和Frogsice。 反调试/反抓取/反跟踪 --- 在反调试的同时,有效的监控W32Dasm、SoftIce、TRW 2000、Turbo Debugger, Sourcer、Filemon、ExeSpy、ResSpy、RegMon、Memory Monitor等常用破解工具是否在运行。 动态代码加密/解密 --- 对你程序中指定代码提供动态加密/解密,有效防止内存补丁(memory patch)。 指定系统授权 --- 通过对用户定义的系统硬件识别识别函数,可以对用户计算机指定授权,确保了被授权的系统的唯一性。 黑名单 --- 可以将那些非法或者被公布的KEY列为黑名单,有效防止非法更新。 试用设置 --- 可以设置使用次数限制、使用日期限制或最后日期限制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值