|
[求助]KRYPTON0.2脱壳求助
输入表很容易处理的,一般不会有大的问题 壳在到OEP后,有部分Call是进入壳动态内存的, 所以直接dump下来,有些功能执行会出错 下面是壳跳oep前的处理 003B3A39 66:8138 FF15 cmp word ptr [eax], 15FF //比较是否是call 003B3A3E 75 09 jnz short 003B3A49 003B3A40 8378 02 00 cmp dword ptr [eax+2], 0 //比较是否是call [0] 003B3A44 75 03 jnz short 003B3A49 003B3A46 8958 02 mov dword ptr [eax+2], ebx //此时ebx == 003C7BF5 003B3A49 40 inc eax 003B3A4A 49 dec ecx 003B3A4B 85C9 test ecx, ecx 003B3A4D ^ 75 EA jnz short 003B3A39 //循环 003B3A4F 8B8D AFBB4100 mov ecx, dword ptr [ebp+41BBAF] 003B3A55 890C24 mov dword ptr [esp], ecx 003B3A58 8B95 B6BB4100 mov edx, dword ptr [ebp+41BBB6] //取出oep地址 003B3A5E FFE2 jmp edx //edx = 401000 跳OEP 到OEP后,代码中有很多处都是这样的: 00401928 6A 00 push 0 0040192A 68 483B4000 push 00403B48 0040192F FF35 543B4000 push dword ptr [403B54] 00401935 FF35 3C3B4000 push dword ptr [403B3C] 0040193B FF35 603B4000 push dword ptr [403B60] 00401941 E8 3A070000 call 00402080 00401946 FF15 F57B3C00 call dword ptr [3C7BF5] :[003C7BF5]=003B3A60 0040194C FF15 F57B3C00 call dword ptr [3C7BF5] :[003C7BF5]=003B3A60 所以应该自己写段代码处理一下子~~~~~ 我写段到OEP的脚本吧,修复这种call的就不会了~~~~ #log //KRYPTON0.2 主程序 //msg "忽略所有异常" var oep var codebase var packerbase var iidstart var iidsize gpa "VirtualAlloc","kernel32.dll" cmp $RESULT,0 je err find $RESULT,#C2??00# cmp $RESULT,0 je err bp $RESULT esto esto bc $RESULT mov packerbase,eax go packerbase //正式进入壳代码 find eip,#8B188B7E10# cmp $RESULT,0 je err bp $RESULT esto bc $RESULT mov codebase,edx find eip,#83BD????????007413# cmp $RESULT,0 je err add $RESULT,7 bp $RESULT esto bc $RESULT mov [eip],#EB# //不让它破坏函数名 mov iidstart,esi bpwm packerbase,1 esto bpmc mov iidsize,esi sub iidsize,iidstart add iidsize,14 //还要一个空白iid收尾 sub iidstart,codebase find eip,#FFE2# cmp $RESULT,0 je err add $RESULT,1 //在第二个jmp edx处跳OEP find $RESULT,#FFE2# cmp $RESULT,0 je err bp $RESULT esto bc $RESULT sti mov oep,eip sub oep,codebase log oep log iidstart log iidsize cmt eip,"OEP,直接dump,查看日志窗口,根据其中提示用loadpe修改dump下的文件" ret err: msg "error" ret |
|
[下载]oreans_src.rar
八百年前的东西 |
|
[求助]PE-Armor 0.46 -> China Cracking Group *脱壳之道
[QUOTE=csshrb;306892]脱壳后程序可以运行,用peid查看如下: 但是但.RSS,.iData.....等等没有正确显示,所以看不到资源。 不知道是脱的不对,还是应该怎么处理。 [/QUOTE] 如果仅仅是资源问题可以尝试freeres之类的工具 有的时候是资源工具本身的问题,比如exescope似乎只认识资源段名字为:.rsrc的资源. |
|
[求助]写脱壳机中,脱FSG2.0想到的导入表新建问题
比我那CoolDumpper好多了,我的那个引擎不能下硬断点,不能下内存断点 脱压缩壳基本没问题,脱加密壳就麻烦多了 不过最大的优点是不怕任何形式的调试器检测~~~~ |
|
|
|
[原创]堀北压缩 0.28 beta脱壳
这是我以前写的脱kbys的插件代码 //关键脱壳函数--API extern "C" void WINAPI StartUnpack(PROCESS_INFORMATION pi, DWORD dwBaseAddress, DWORD dwEntryPoint) { DWORD dwPid = pi.dwProcessId; DWORD dwTid = pi.dwThreadId; HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid); HANDLE hThread = ::OpenThread(THREAD_ALL_ACCESS, FALSE, dwTid); ASSERT(hProcess); ASSERT(hThread); //发消息表示开始脱壳 DWORD dwOep = 0; DWORD dwRead = 0; CONTEXT context; UCHAR szFirst[] = {0xE8, 0x01, 0x00, 0x00, 0x00, 0xC3, 0xC3}; DWORD dwMagic = FindMemory(hProcess, dwEntryPoint, szFirst, sizeof(szFirst), 0x100); if (dwMagic != dwEntryPoint + 5) {//shoooo超级伪装壳 TellUnpacker(g_szError); return Terminate(hProcess, hThread); } beginning: DWORD dwNewPP = 0; ReadMemory(hProcess, dwEntryPoint + 1, &dwNewPP, 4, &dwRead); GO(hProcess, hThread, dwNewPP, context); UCHAR szNewJmp[] = {0xFF, 0xE0}; dwMagic = FindMemory(hProcess, dwNewPP, szNewJmp, sizeof(szNewJmp), 0x100); if (dwMagic != (dwNewPP + 0xC)) { DWORD dwLoadLib = GetAddress("kernel32.dll", "LoadLibraryA"); GO(hProcess, hThread, dwLoadLib, context); RTU(hProcess, hThread, context); DWORD dwIAT = context.Edi; UCHAR szMagic[] = {0xFF, 0x63, 0x0C}; dwMagic = FindMemory(hProcess, context.Eip, szMagic, sizeof(szMagic), 0x100); if (0 == dwMagic) { //出错 TellUnpacker(g_szError); return Terminate(hProcess, hThread); } //0.22 TellUnpacker("kbys 0.22"); GO(hProcess, hThread, dwMagic, context); ReadMemory(hProcess, context.Ebx + 0xC, &dwOep, 4, &dwRead); GO(hProcess, hThread, dwOep, context); RTU(hProcess, hThread, context); dwOep = context.Eip; DumeNow(dwOep, dwIAT); return Terminate(hProcess, hThread); } TellUnpacker("kbys 0.28"); DWORD dwLoadLib = GetAddress("kernel32.dll", "LoadLibraryA"); GO(hProcess, hThread, dwLoadLib, context); RTU(hProcess, hThread, context); DWORD dwIAT = context.Edi; GO(hProcess, hThread, dwMagic, context); dwOep = context.Eax; dwEntryPoint = dwOep; dwMagic = FindMemory(hProcess, dwEntryPoint, szFirst, sizeof(szFirst), 0x100); if (dwMagic == dwEntryPoint + 5) { if (::MessageBox(g_hWndList, "似乎还有一层,是否继续脱?", "INFO", MB_YESNO) == IDYES) goto beginning; } DumeNow(dwOep, dwIAT); return Terminate(hProcess, hThread); } |
|
[求助]PE-Armor 0.46 -> China Cracking Group *脱壳之道
把程序贴出来,我脱脱看 |
|
[原创]Anit007 (VIP) 5.6.UnPacked.Fixed (380KB)
跑不了,点了没反映. |
|
向大侠们请教一下,脱 ACProtect 2.0 的一些问题
看堆栈~~~~ |
|
[求助]写脱壳机中,脱FSG2.0想到的导入表新建问题
1.那个用来间隔的地址,你自己可以判断下是不是有效的那不就行了,不是有效的就用0填掉. 2. 新建导入表时,你如果能找到原始导入表需要填充的IAT的范围,按那个范围来新建的IAT,是否就不需要考虑0x15ff,0x25ff的问题? |
|
[求助]侦帮忙脱一下这软件的壳。。PE-Armor 0.46 -> China Cracking Group * 已解决......
这段脚本随着我的MP3挂掉而灰飞湮灭了~~~~ |
|
[注意]收集一下工具创意……
自动对比调试器~~~ 1. 两个相同的程序(功能相同,数据不同,比如一个是无壳的,一个是脱壳出来的,脱壳出来的执行不正常),自动比较两个程序在哪里走的分支不同。 2. 或者是同一个程序,比如说是一个验证注册码的,输入注册码:"a",和输入注册码"b",假如注册码"b"是正确的,比较按"验证"按钮后程序在哪个地方走了不同分支。 |
|
|
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值