|
[求助]文件夹加密超级大师的破解教程!
顶楼上的!!!! |
|
[通告]准备将这个版块打造成一个新手区
新手来报道了 请多关照 |
|
|
|
[求助]关于2哥教材脱壳进阶第9篇Acprotect1.09疑惑
标 题:Acprotect1.10 Build123之Dephi语言篇 发信人:David 时 间:2004年2月22日 03:52 详细信息: 【脱文作者】 weiyi75[Dfcg] 【作者邮箱】 weiyi75@sohu.com 【作者主页】 Dfcg官方大本营 【使用工具】 Ollydbg1.10b(反Antidbg版),ImportREC1.42 【破解平台】 Win2000/XP 【软件名称】 PE文件分析器 【下载地址】 附件下载 【软件简介】 Acprotect1.10 Build123“注册”版本加密的一个加密的一个PE文件分析器。 【软件大小】 553k 【加壳方式】 UltraProtect 1.x -> RISCO Software Inc. 【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享。 【破解目的】 模拟跟踪寻找Stolen Code具体内容。 前言,这个软件是我用Acprotect1.10 Build123“注册”版本加密的,没有使用RSA生成KEY保护,使用了所有反跟踪选项,关于动态代码替换保护软件已说明只支持C++和Dephi,呵呵,对准敌人的死穴点吧,就是模拟跟踪+内存镜像断点。 先OD载入原程序看看 004B7220 > $ 55 PUSH EBP //典型Dephi语言入口点,当Acprotect的壳运行到OEP时,你会发现入口点附近的一些代码被修改,如果你直接脱壳会导致不能运行。经过分析几个Acprotect修改入口代码个数,暂时发现一般是6个字节,有待验证。 稍微说明一下: 每一种编译工具例如 : VC++ , Delphi , Borland , etc.. 在OEP有一个唯一的/相同的PE头 其中的一些是这样的: Push EBP //第一句就是我们模拟跟踪的对象,幸运的是,目前Acprotect还没有采用Asprotect的入口代码变形技术,变了也没用?! MOV Ebp,Esp Add ESP , -010 004B7221 . 8BEC MOV EBP,ESP 004B7223 . 83C4 F0 ADD ESP,-10 004B7226 . B8 A86F4B00 MOV EAX,Pe.004B6FA8 004B722B . E8 6CF4F4FF CALL Pe.0040669C 004B7230 . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4] 004B7235 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 004B7237 . E8 C48CFCFF CALL Pe.0047FF00 004B723C . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4] 004B7241 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 004B7243 . BA 80724B00 MOV EDX,Pe.004B7280 004B7248 . E8 AB88FCFF CALL Pe.0047FAF8 004B724D . 8B0D F4A14B00 MOV ECX,DWORD PTR DS:[4BA1F4] ; Pe.004BBCAC 004B7253 . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4] 004B7258 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 004B725A . 8B15 48E44A00 MOV EDX,DWORD PTR DS:[4AE448] ; Pe.004AE494 004B7260 . E8 B38CFCFF CALL Pe.0047FF18 .......................................................................................... 我们再次复习Dephi语言入口特征码。 这次EBP=12fff0不管用了,程序运行到入口时,EBP的值根本不是12fff0。 OD异常设置不忽略内存异常,其余全部忽略,载入程序,用插件隐藏OD。 004EF000 > 60 pushad //加壳程序入口点,F9运行。 004EF001 87E9 xchg ecx, ebp 004EF003 F9 stc 004EF004 41 inc ecx 004EF005 BF 08589F45 mov edi, 459F5808 004EF00A 50 push eax 004EF00B E8 01000000 call Pey.004EF011 004EF010 7E 58 jle short Pey.004EF06A 004EF012 58 pop eax 004EF013 C1ED E9 shr ebp, 0E9 004EF016 EB 01 jmp short Pey.004EF019 004EF018 - 76 D3 jbe short Pey.004EEFED 004EF01A ED in eax, dx 004EF01B EB 01 jmp short Pey.004EF01E 004EF01D - 75 85 jnz short Pey.004EEFA4 ........................................................................ 内存异常 00415719 CD 01 int 1 //典型Acprotect小于1.20版最后一次异常。 004F771B 40 inc eax 004F771C 40 inc eax 004F771D 0BC0 or eax, eax 004F771F 75 05 jnz short Pey.004F7726 004F7721 90 nop 004F7722 90 nop 004F7723 90 nop 004F7724 90 nop 004F7725 61 popad 004F7726 33C0 xor eax, eax 004F7728 64:8F00 pop dword ptr fs:[eax] 004F772B 58 pop eax 004F772C 60 pushad 004F772D E8 00000000 call Pey.004F7732 ........................................................................ 堆栈内容 0012FF58 0012FFE0 指针到下一个 SEH 记录 0012FF5C 004F76FD SE 句柄 //这里同原来不同,为了跟踪到Stolen Code,选择合适的地点跟踪很关键,在跟踪N个Acprotect程序后,找到了关键点,这些没什么技术可言,只是不断的实际,无数次的失败总结。右键对004F76FD转存中跟随,下内存访问断点。 0012FF60 00000042 0012FF64 59D26602 ........................................................................ 004156FD 8B5C24 0C mov ebx, dword ptr ss:[esp+C] //下断点Shift+F9中断1 004F7701 8383 B8000000 0>add dword ptr ds:[ebx+B8], 2 004F7708 33C0 xor eax, eax 004F770A C3 retn 004F770B 64:67:FF36 0000 push dword ptr fs:[0] 004F7711 64:67:8926 0000 mov dword ptr fs:[0], esp 004F7717 33C0 xor eax, eax 004F7719 CD 01 int 1 004F771B 40 inc eax 004F771C 40 inc eax 004F771D 0BC0 or eax, eax 004F771F 75 05 jnz short Pey.004F7726 004F7721 90 nop 004F7722 90 nop 004F7723 90 nop 004F7724 90 nop 004F7725 61 popad ........................................................................ 004F774D 8B048E mov eax, dword ptr ds:[esi+ecx*4] //下断点Shift+F9中断2,清除内存断点。 004F7750 8B5C8E 04 mov ebx, dword ptr ds:[esi+ecx*4+4] 004F7754 2BC3 sub eax, ebx 004F7756 C1C8 11 ror eax, 11 004F7759 03C2 add eax, edx 004F775B 81F2 B0362B9F xor edx, 9F2B36B0 004F7761 89048E mov dword ptr ds:[esi+ecx*4], eax 004F7764 49 dec ecx 004F7765 ^ EB E1 jmp short Pey.004F7748 004F7767 61 popad 004F7768 61 popad 004F7769 C3 retn //F4直接下来,这时是模拟跟踪的时候了。 ........................................................................ Ctrl+T设置暂停运行跟踪条件 将命令是一个复选框打勾,填入 PUSH EBP ,确定。 这个条件断点如何在命令行设置,肯请诸位大侠不吝指教。为什么要设置这个命令,先前已说明这是Acprotect的死穴之一,对准它点吧。 Ctrl+F11跟踪进入每个Call,1分钟左右。 004254C9 55 push ebp //Stolen Code 004254CA 8BEC mov ebp, esp //Stolen Code //一切尽在掌握 004254CC 83EC 44 ADD ESP,-10 //Stolen Code 004254CF 60 pushad 004254D0 60 pushad 005074D1 E8 00000000 call Pey.005074D6 也可以下个12ffc0的硬件写入dword断点,可以断在4254CA这句 ........................................................................ 这个程序抽了六个字节。 ALT+M 打开内存镜像断点,对准它的第二个死穴点。 内存镜像,项目 21 地址=00401000 //Code段下内存访问断点 大小=000B7000 (749568.) Owner=Pey 00400000 区段=CODE 包含=code 类型=Imag 01001002 访问=R 初始访问=RWE F9运行到达 004B7220 BF C12D8DE2 mov edi, E28D2DC1 004B7225 90 nop 004B7226 B8 A86F4B00 mov eax, Pey.004B6FA8 //临时Oep,滚动条向上看,如何判断抽掉多少字节,用滚动条是代码会混乱,然后用Ctrl+向上下键配合保证看到临时Oep代码完整,并且上面的要有几行代码同时存在,如我现在调整的样式。 004B722B E8 6CF4F4FF call Pey.0040669C 004B7230 A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7235 8B00 mov eax, dword ptr ds:[eax] 004B7237 E8 C48CFCFF call Pey.0047FF00 004B723C A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7241 8B00 mov eax, dword ptr ds:[eax] 004B7243 BA 80724B00 mov edx, Pey.004B7280 004B7248 E8 AB88FCFF call Pey.0047FAF8 004B724D 8B0D F4A14B00 mov ecx, dword ptr ds:[4BA1F4] ; Pey.004BBCAC 004B7253 A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7258 8B00 mov eax, dword ptr ds:[eax] 004B725A 8B15 48E44A00 mov edx, dword ptr ds:[4AE448] ; Pey.004AE494 004B7260 E8 B38CFCFF call Pey.0047FF18 ........................................................................ OD直接修复找到的六个字节。 004B7220 55 push ebp //用Od插件修正入口为B7220直接脱壳吧,重建输入表的勾去掉 004B7221 8BEC mov ebp, esp 004B7223 83C4 F0 add esp, -10 004B7226 B8 A86F4B00 mov eax, Pey.004B6FA8 004B722B E8 6CF4F4FF call Pey.0040669C 004B7230 A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7235 8B00 mov eax, dword ptr ds:[eax] 004B7237 E8 C48CFCFF call Pey.0047FF00 004B723C A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7241 8B00 mov eax, dword ptr ds:[eax] 004B7243 BA 80724B00 mov edx, Pey.004B7280 004B7248 E8 AB88FCFF call Pey.0047FAF8 004B724D 8B0D F4A14B00 mov ecx, dword ptr ds:[4BA1F4] ; Pey.004BBCAC 004B7253 A1 C4A04B00 mov eax, dword ptr ds:[4BA0C4] 004B7258 8B00 mov eax, dword ptr ds:[eax] 004B725A 8B15 48E44A00 mov edx, dword ptr ds:[4AE448] ; Pey.004AE494 004B7260 E8 B38CFCFF call Pey.0047FF18 ........................................................................ 修复IAT必须关闭OD单独开加壳程序修复,不然ImportREC停止响应,最后用ImportREC Oep填B7220,跟踪等级三轻松修复,无法运行!? 寻找出错原因。 004F01F8 /78 01 js short dumped_.004F01FB 004F01FA |F8 clc 004F01FB BF 58D5CC8F mov edi, 8FCCD558 004F0200 8B45 00 mov eax, dword ptr ss:[ebp] 004F0203 7C 03 jl short dumped_.004F0208 004F0205 7D 01 jge short dumped_.004F0208 004F0207 E9 E9040000 jmp dumped_.004F06F5 004F020C 004E 66 add byte ptr ds:[esi+66], cl 004F020F 1BD9 sbb ebx, ecx 004F0211 33C2 xor eax, edx 004F0213 50 push eax 004F0214 E8 01000000 call dumped_.004F021A //发现这个Call可能是新版Acprotect的解码技术,和完美卸载Xp里面的一样的,这一段修复一直没搞定,比原先的Jmp xxxxx 那种语句难多了。 004F0219 EA 58587B05 668>jmp far 8166:057B5858 不好意思,文章没写完,卡住了。 今天看到Fly大侠的文章,呵呵,明白是什么一会事。 其实本版本Acprotect嵌有Oep处代码检验程序,发现Oep处代码被替换,立即拒绝解码,你失去了关键的代码当然程序无法运行,还要承认N次错误确定按钮。 004254C9 55 push ebp //Stolen Code 004254CA 8BEC mov ebp, esp //Stolen Code //一切尽在掌握 004254CC 83EC 44 ADD ESP,-10 //Stolen Code 我们已经掌握。 004B7226 B8 A86F4B00 mov eax, Pey.004B6FA8 //临时Oep也知道。 现在做什么,让程序认为你没有脱壳,乖乖将perplex段里面有用的内容全部解码。 方法 push ebp //Stolen Code mov ebp, esp //Stolen Code //一切尽在掌握 ADD ESP,-10 //Stolen Code jmp 004B7226 //直接跳向临时Oep Od载入脱壳修复后的程序,Ctrl+G 004EF000 004EF000 >/$ 68 420E715B PUSH 5B710E42 //4EF000是原来壳的入口点,狸猫换太子,将Oep入口代码复制到这里。 004EF005 |. 813424 A27989>XOR DWORD PTR SS:[ESP],2C8979A2 004EF00C . C3 RETN 004EF00D . 68 59266136 PUSH 36612659 004EF012 . 813424 248C99>XOR DWORD PTR SS:[ESP],41998C24 004EF019 . C3 RETN 004EF01A . 68 24C959F5 PUSH F559C924 004EF01F . 813424 6863A1>XOR DWORD PTR SS:[ESP],82A16368 004EF026 . C3 RETN 004EF027 . 68 CF904873 PUSH 734890CF 004EF02C . 813424 C01DAE>XOR DWORD PTR SS:[ESP],4AE1DC0 004EF033 . C3 RETN ......................................................... 004EF000 > . 55 PUSH EBP 004EF001 . 8BEC MOV EBP,ESP 004EF003 . 83C4 F0 ADD ESP,-10 004EF006 .- E9 1B82FCFF JMP dumpedw4.004B7226 004EF00B 90 NOP //注意保持代码完整,填入一个Nop 004EF00C . C3 RETN 004EF00D . 68 59266136 PUSH 36612659 004EF012 . 813424 248C99>XOR DWORD PTR SS:[ESP],41998C24 004EF019 . C3 RETN 004EF01A . 68 24C959F5 PUSH F559C924 004EF01F . 813424 6863A1>XOR DWORD PTR SS:[ESP],82A16368 004EF026 . C3 RETN 004EF027 . 68 CF904873 PUSH 734890CF 004EF02C . 813424 C01DAE>XOR DWORD PTR SS:[ESP],4AE1DC0 004EF033 . C3 RETN ......................................................... 将替换的代码复制到程序中,另存为一个文件,用PEedit修正入口为EF000,正常运行。 【破解总结】发现Dephi语言的Acprotect的壳采用了Stolen Code,动态解码,用Acprotect保护的它人没加上RSAKEY就有强劲的保护,加RSAKEY保护壳继续研究中,感谢你耐心看完. 这里有篇参考文章 看的懂的说下 |
|
[求助]关于2哥教材脱壳进阶第9篇Acprotect1.09疑惑
哪怕回答我一个问题也行啊 有人吗 |
|
|
|
新手脱壳遇到UltraProtect 1.x -> RISCO Software Inc.
关于2哥教材脱壳进阶第9篇Acprotect1.09疑惑 各位大侠 你们好 小弟拜读2哥的脱壳教材 受益非浅 但有一处不明 思索一晚 都没相通 特地请教下 Acprotect1.09这个壳 先把od设置成 忽略除 内存访问异常以外的说有异常 f9 再来shift+f9 到了 0041308E CD 01 INT 1 按找以前的教材 因该是 察看堆栈区 找到 se句丙 返回到se处理完的出口 00413090 40 INC EAX 但教材里却是 用内存断点法 直接找到oep 00413091 40 INC EAX 00413092 0BC0 OR EAX,EAX 00413094 0F85 B6000000 JNZ NOTEPAD.00413150 0041309A 60 PUSHAD 我的问题有2: 1 为什么这里不用2次内存断点法 以前的PE-SHiELD V0.25 那篇 先让壳处理完 seh 再来2次内存断点 2次内存断点和直接内存断点 什么情况下用其中个啊 同样是加密壳 这里用1次短点 2 最重要的 按照2哥的方法 下了一次内存断点 就到了 伪oep 004010C7 000D 0A0000B3 add byte ptr ds:[B300000A],cl 004010CD BB 93448578 mov ebx,78854493 程序停这了 不是真正的入口oep 004010D2 56 push esi 004010D3 FF15 E4634000 call dword ptr ds:[4063E4] ; NOTEPAD.0040D1BA 004010D9 8BF0 mov esi,eax 004010DB 8A00 mov al,byte ptr ds:[eax] 004010DD 3C 22 cmp al,22 004010DF 75 1B jnz short NOTEPAD.004010FC 004010E1 56 push esi 004010E2 FF15 F4644000 call dword ptr ds:[4064F4] ; NOTEPAD.0040D4C6 因为acprotect 把oep 前面6个字节改了 2哥的方法是 打开记事本 看看没加壳的前面6个字节 如果是不知道这是为什么编译器遍的 程序 怎么才能把 acprotect还原 这是不是就是别人说的 偷code啊 |
|
[Asprotect]-Aston 1.92
楼主出精率真高 10% 牛 |
|
新手脱壳遇到UltraProtect 1.x -> RISCO Software Inc.
可以参考 手动脱壳进阶第九篇Acprotect1.09 在baidu里search 手动脱壳进阶第九篇Acprotect1.09 貌似 acpro就是 ultraprotect |
|
[求助]PEncrypt 3.1 Final遇到指针修复问题
ok thank you 看雪老大亲自出马 实在太感谢了 我用看雪老大的方法 od 载入 在 go到 内存55e2fe 下断 f9到这 察看堆栈 最上面 可以看到调用的函数 解决了 看雪老大把思路和方法都讲了 让小弟矛涩盾开 谢谢拉 |
|
|
|
菜鸟问题想问下怎么通过 OD 的地址 搜索位置
od可以做到的 你双激注释狂 就可以写下注释 (在汇编代码右边的那拦) 如果你要再打开od很快找到的话 建议你在这个地址下个断 按f2 这样 你按下f9就到了 你还可以把地址写在记事本里 再打开od 用ctrl +g 输入地址就可以了 |
|
[求助]初学者问题:如何用简单的方法知道某个exe是否加壳?
找个猛壳加下 exe就可以拉 比如themida.0.05 好猛地 还有加壳不够 讲算法搞复杂才是硬道理 程序多处做CRC校验文件大小检查,发现不对就退出。一定要多处检查,不能只检查一次。 用inline函数将注册部分分成许多小块,分散到程序各处运行。最好能放在不同的线程中运行. 检查结束不要给任何提示,在程序中的内存中做一个标志即可,提示信息要延迟一段时间出现,不要让破解者通过提示信息找到标志位置或检查结束位置,否则前功尽弃。当然也可以象上面那样做10000个标记,随机用一个,这时你不用担心破解者知道标记的位置.而且标记最好不要用0或1,可以用一个貌似随机的值作为注册成功的标记,如何产生这个随即值只有你自己知道. |
|
[求助]上兴远程控制V3.9脱壳后不可修改的问题
我下了它的 WWW.98exe.com 4.0版本 发现用esp也可以脱啊 载入 007F50BE > 60 PUSHAD od到这 007F50BF E8 09000000 CALL rejoice.007F50CD f8到这 007F50C4 3C 4F CMP AL,4F 007F50C6 3F AAS 在命令行打 hr esp 按f9 就到oep拉 dump出来 的确是nothing found 但你用 深度扫描就发现 其实壳已经脱了 而且是可以用exescope改资源的 用fly大侠的一句话 不要太过分相信工具 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值