|
[求助]在脱ASPACK壳的一个问题,请各大虾指点
008A9158 00000000 008A915C 00000000 008A9160 00000000 008A9164 00000000 008A9168 7C59BB03 KERNEL32.GetCurrentThreadId 008A916C 77F85655 ntdll.RtlDeleteCriticalSection 008A9170 77F82091 ntdll.RtlLeaveCriticalSection 008A9174 77F82060 ntdll.RtlEnterCriticalSection 008A9178 7C599864 KERNEL32.InitializeCriticalSection 008A917C 7C58E85F KERNEL32.VirtualFree ...... 008A9208 7C586089 KERNEL32.GetFileType 008A920C 7C58C1AB KERNEL32.CreateFileA 008A9210 7C577E6D KERNEL32.CloseHandle 008A9214 00000000 008A9218 77E3D536 USER32.GetKeyboardType 008A921C 77E20D2E USER32.LoadStringA 008A9220 77E333B3 USER32.MessageBoxA 008A9224 77E2441E USER32.CharNextA 008A9228 00000000 008A922C 7C2D2C9C ADVAPI32.RegQueryValueExA 008A9230 7C2D24B9 ADVAPI32.RegOpenKeyExA 008A9234 7C2D18BF ADVAPI32.RegCloseKey 008A9238 00000000 008A923C 779DABB0 oleaut32.SafeArrayPutElement 008A9240 779DA9C0 oleaut32.SafeArrayPtrOfIndex 008A9244 779DAA60 oleaut32.SafeArrayGetElement 008A9248 779DA9B0 oleaut32.SafeArrayUnaccessData 008A924C 779DA980 oleaut32.SafeArrayAccessData 008A9250 779DA880 oleaut32.SafeArrayGetUBound 008A9254 779D9840 oleaut32.SafeArrayCreate 008A9258 779DBDD0 oleaut32.VariantChangeTypeEx 008A925C 779DBAE0 oleaut32.VariantCopyInd 008A9260 779DB7A0 oleaut32.VariantClear 008A9264 779D9430 oleaut32.SysStringLen 008A9268 779D93D0 oleaut32.SysFreeString 008A926C 779D92D0 oleaut32.SysReAllocStringLen 008A9270 779D9200 oleaut32.SysAllocStringLen 008A9274 00000000 008A9278 7C59C148 KERNEL32.TlsSetValue 008A927C 7C59C0FB KERNEL32.TlsGetValue 008A9280 7C59C1ED KERNEL32.TlsFree 008A9284 7C59BFCE KERNEL32.TlsAlloc 008A9288 7C5792B8 KERNEL32.LocalFree 008A928C 7C579129 KERNEL32.LocalAlloc 008A9290 7C590A10 KERNEL32.GetModuleFileNameA 008A9294 00000000 008A9298 7C2D2C9C ADVAPI32.RegQueryValueExA 008A929C 7C2D24B9 ADVAPI32.RegOpenKeyExA 008A92A0 7C2D18BF ADVAPI32.RegCloseKey 008A92A4 00000000 008A92A8 7C58F158 KERNEL32.lstrcpyA 008A92AC 7C58F05E KERNEL32.lstrcmpA ...... 008A9870 717240A6 comctl32.InitCommonControls 008A9874 00000000 008A9878 7836790E shell32.Shell_NotifyIconA 008A987C 78366297 shell32.ShellExecuteA 008A9880 00000000 008A9884 78314ABF shell32.SHGetPathFromIDListA 008A9888 78324E08 shell32.SHGetMalloc 008A988C 7831E6FC shell32.SHGetDesktopFolder 008A9890 7838E681 shell32.SHBrowseForFolderA 008A9894 00000000 008A9898 76B364A8 008A989C 00000000 008A98A0 7C57B5E0 KERNEL32.MulDiv 008A98A4 00000000 |
|
[求助]在脱ASPACK壳的一个问题,请各大虾指点
OEP: 008A2AE0 55 push ebp 008A2AE1 8BEC mov ebp, esp 008A2AE3 83C4 B4 add esp, -4C 008A2AE6 B8 48288A00 mov eax, 008A2848 008A2AEB E8 7846EEFF call 00787168 // F7 008A2AF0 E8 A7B5FFFF call 0089E09C 008A2AF5 E8 D210EEFF call 00783BCC 00787168 BA 08318A00 mov edx, 008A3108 0078716D 837D 0C 01 cmp dword ptr [ebp+C], 1 00787171 75 2A jnz short 0078719D 00787173 50 push eax 00787174 52 push edx 00787175 C605 D0748A00 0>mov byte ptr [8A74D0], 1 0078717C 8B4D 08 mov ecx, dword ptr [ebp+8] 0078717F 890D DC748A00 mov dword ptr [8A74DC], ecx 00787185 894A 04 mov dword ptr [edx+4], ecx 00787188 C742 08 0000000>mov dword ptr [edx+8], 0 0078718F C742 0C 0000000>mov dword ptr [edx+C], 0 00787196 E8 81FFFFFF call 0078711C // F7 0078719B 5A pop edx 0078719C 58 pop eax 0078719D FF35 E0748A00 push dword ptr [8A74E0] 007871A3 B9 20318A00 mov ecx, 008A3120 007871A8 E8 BBC8FFFF call 00783A68 007871AD C3 retn 0078711C 53 push ebx 0078711D 81C4 F8FEFFFF add esp, -108 00787123 68 05010000 push 105 00787128 8D4424 04 lea eax, dword ptr [esp+4] 0078712C 50 push eax 0078712D A1 DC748A00 mov eax, dword ptr [8A74DC] 00787132 50 push eax 00787133 E8 A4FEFFFF call 00786FDC // F7 00787138 8BC4 mov eax, esp 0078713A E8 A1EEFFFF call 00785FE0 0078713F 8BD8 mov ebx, eax 00787141 891D 18318A00 mov dword ptr [8A3118], ebx 00787147 85DB test ebx, ebx 00787149 75 0A jnz short 00787155 0078714B A1 0C318A00 mov eax, dword ptr [8A310C] 00787150 A3 18318A00 mov dword ptr [8A3118], eax 00787155 B8 08318A00 mov eax, 008A3108 0078715A E8 69F1FFFF call 007862C8 0078715F 81C4 08010000 add esp, 108 00787165 5B pop ebx 00787166 C3 retn 00786FDC - FF25 90928A00 jmp dword ptr [8A9290] ; KERNEL32.GetModuleFileNameA 00786FE2 8BC0 mov eax, eax 00786FE4 - FF25 8C928A00 jmp dword ptr [8A928C] ; KERNEL32.LocalAlloc 00786FEA 8BC0 mov eax, eax 00786FEC - FF25 88928A00 jmp dword ptr [8A9288] ; KERNEL32.LocalFree IAT: 8A9168-8A98A4 |
|
[求助]脱壳问题
7C915FD2-7C91603E 全是Data, 不是Code; 问题的原因是[56A3B0] 中的7C915FEC 不对, 应该是IAT没修复正确. 用未脱壳的程序, 在 005272C6 下硬件断点, 看[56A3B0]中是什么 005272C6 |. FF15 B0A35600 CALL DWORD PTR DS:[56A3B0] ; kernel32.7C915FEC |
|
|
|
[求助]面对未知壳,如果要手动脱的话,应该怎么做?
压缩壳可以那样. 加密壳一般不行. 对未知加密壳一般如下: 1. 先去掉反调试, 使程序能在调试器的控制下运行: 1.1 先用调试器OD/softice等 载入, 在无单步/断点的情况下看能否顺利运行. 如不能运行, 表明有反调试; 1.2 简单的用OD的HideOD 插件就可以搞定. 复杂的要具体分析, 要比较熟悉常用的反调试及怎么反-反调试. 1.3 如果知道是什么样的反调试,不会跳过, 那是基本功的问题, 在看雪精华中总可以找到参考的例子. 1.4 如果是特别新的反调试,普通人是搞不定的. 大虾一般都对新的挑战感兴趣, 只能等大虾出马. 1.5 使程序能在调试器的控制下运行, 即可以设置断点, 该断下就断下, 该运行就运行. 2. 找OEP 和 DUMP 程序内存 IMAGE 2.1 找OEP一般可用二次或多次内存断点大法. 到OEP先判断有无 stolen code, 有的话就要修复. 2.2 如果只是在OEP处有少量的 stolen code, 可跟踪带壳程序, 找到原来的代码, 要靠经验. 2.3 如果 stolen code 很多,且不仅仅只在OE处, 则一般需要补区段. 2.4 一般的加密壳可在OEP DUMP, 猛壳一般都不行. 2.5 在 OEP DUMP的如果不行, 表明程序不是一次完全解密的. 有的是还没完全解密, 有的是又重新加密回去了. 2.6 如果不能DUMP, 表明有anti-DUMP, 则一般都要经过DEBUG找到anto-DUMP在哪, 又是基本功了 3. 修复IAT, 资源, 如果是DLL, 一般还要修复重定位. 4. 补附加数据,去暗桩 多余的话: 1. 未知壳一般都不会是猛壳, 压缩壳就不说了,加密壳参考上面就可搞定. 2. 新出名的猛壳, 又大量应用的, 在看雪肯定是热门话题. 3. 应用较少的猛壳,或一些高手的超猛壳, 带 SDK 的, 还是放弃吧, 何苦和自己过不去. 4. 对未知猛壳都能拿下的话,是不用看上面几条的,请分享你的经验. |
|
[求助]zxarps FSG v2.0/Upack 0.3.9 壳
FSG....exe 用OD载入, 在40416C下硬件断点, F9 一下就到OEP, dump; OEP:416C IAT: 5000, 120 用ImportRec 修复, 把invalid 的全 cut 掉, 就OK. |
|
[求助]这一段代码什么含义,谁给个注释?谢谢
加密.exe (0x44D157-0x44D1DD) u8 filebuffer[xxxx]; u8 ch; u16 N0, N1, N2; N0=0x1608; N1=0x6081; N2=0x0816; for(i=0;i<num;i++) { ch = filebuffer[i]; ch ^= (N2>>8); N2 += ch; N2 *= N1; N2 += N0; filebuffer[i] = ch; } |
|
[求助]混淆代码太多了,如何更好的破解分析这个软件!
鸡蛋壳在看雪可从不发布详细的破解分析和注册码算法分析, 估计你可能要失望了. |
|
[求助]随机机器玛问题
兄弟的求助贴真多! |
|
[求助]大家来看看,这是什么自效验软件??
ep21.exe // 取得文件实际长度 00409C39 8B43 38 mov eax, dword ptr [ebx+38] 00409C3C 8943 04 mov dword ptr [ebx+4], eax ... 0050E633 8BD8 mov ebx, eax // 文件应该的长度 0050E635 B8 B0EC5000 mov eax, 0050ECB0 ; ASCII "470528" 0050E63A E8 DDB1EFFF call 0040981C // **** 两个长度相减, call 00404D00中会用到 *** 0050E63F 2BD8 sub ebx, eax 0050E641 68 748E5100 push 00518E74 0050E646 B9 01000000 mov ecx, 1 0050E64B 8BD3 mov edx, ebx 0050E64D B8 C0EC5000 mov eax, 0050ECC0 ; ASCII "C38A21" 0050E652 E8 A966EFFF call 00404D00 p421.exe // 取得文件实际长度 00409F1D |. 8B43 38 mov eax, dword ptr [ebx+38] 00409F20 |. 8943 04 mov dword ptr [ebx+4], eax ... 0050F1AE . 8BD8 mov ebx, eax // 文件应该的长度 0050F1B0 . B8 68FA5000 mov eax, 0050FA68 ; ASCII "472576" 0050F1B5 . E8 22A9EFFF call 00409ADC 0050F1BA . 2BD8 sub ebx, eax // **** 两个长度相减 *** 0050F1BC . 68 189F5100 push 00519F18 0050F1C1 . B9 01000000 mov ecx, 1 0050F1C6 . 8BD3 mov edx, ebx 0050F1C8 . B8 78FA5000 mov eax, 0050FA78 ; ASCII "C38A21" 0050F1CD . E8 B65DEFFF call 00404F88 |
|
[求助]关于软件自效验问题
// 长度比较 00413FB1 817D F4 90F9000>CMP DWORD PTR SS:[EBP-C],0F990 // 校验比较 00414711 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00414714 50 PUSH EAX 00414715 FF75 F0 PUSH DWORD PTR SS:[EBP-10] 00414718 E8 5C91FFFF CALL 星缘QQ群.0040D879 0041471D 83C4 08 ADD ESP,8 00414720 83F8 00 CMP EAX,0 00414723 B8 00000000 MOV EAX,0 00414728 0F94C0 SETE AL 0041472B 8945 EC MOV DWORD PTR SS:[EBP-14],EAX // 长度比较 00410F0E 817D F8 90F9000>CMP DWORD PTR SS:[EBP-8],0F990 |
|
[求助]这种壳怎么个脱法
就一层壳, ESP定律秒脱, IMAGEBASE: 30820000 OEP: 0DD5D8 (308FD5D8) IAT: 0F0190 - F096C Import 修复后可运行 应该是DELPH的程序 入口和一些子程序有代码变形, 变形的代码都在 30F0C000-30F0D0E0 之间,有花指令, 要完美修复, 那可是一体力活, 要累死人的. 举一例子: 308FD5D8 /E9 23EA6000 JMP crackme.30F0C000 // OEP, 30F0C000 55 PUSH EBP // 原来的 push ebp, 位置移动 30F0C001 03EF ADD EBP,EDI 30F0C003 2E:EB 01 JMP SHORT crackme.30F0C007 ; Superfluous prefix 30F0C007 /EB 01 JMP SHORT crackme.30F0C00A 30F0C00A C1D5 C9 RCL EBP,0C9 ; Shift constant out of range 1..31 30F0C00D C1DD C5 RCR EBP,0C5 ; Shift constant out of range 1..31 30F0C010 81ED 76601594 SUB EBP,94156076 30F0C016 8D6C0C 36 LEA EBP,DWORD PTR SS:[ESP+ECX+36] // xxx1 30F0C01A 2BE9 SUB EBP,ECX // xxx2 30F0C01C 8D6C35 CA LEA EBP,DWORD PTR SS:[EBP+ESI-36] // xxx3 30F0C020 2BEE SUB EBP,ESI // xxx4 30F0C022 E9 2C060000 JMP crackme.30F0C653 xxx1-xxx4 是 mov ebp, esp 的代码变形, xxx1 前的是垃圾指令 |
|
[求助]请问这是为什么?
以普通的逻辑来讲, NOP掉以后, 功能完全一样. 但是产生了以下区别: 1. 如果读 0081D000 到 0081D028 中的任何内容,将得到不一样的结果. 2. 运行到0081D02A的时候, [ESP-04], [ESP-08], [ESP-0C], [ESP-10], [ESP-14]中,将不再是确定的值, 如果在子程序0081D06A中读一下其中的某一值, 就能读出区别, 当然[ESP-04]要除外. |
|
对bpx settimer的困惑
ESI中不是地址, 是时间值, 对应参数uElapse, 由 下面的 call ebx 得来 00476F76 FFD3 call ebx 00476F78 8BF0 mov esi,eax 0 --- lpTimerFunc esi --- uElapse 0A --- uIDEvent edx --- hWnd 00476F8C 8B55 1C mov edx,dword ptr ss:[ebp+1C] 00476F8F 6A 00 push 0 00476F91 56 push esi 00476F92 6A 0A push 0A 00476F94 52 push edx 00476F95 FF15 1C975400 call dword ptr ds:[<&USER32.SetTimer>] ; USER32.SetTimer 在 SetTimer 以后, 每隔一定的时间 (uElapse = esi), 系统将发送WM_TIMER 消息给程序, 消息的hWnd 参数为上面的edx, nIDEvent 为0x0A |
|
对bpx settimer的困惑
The SetTimer function creates a timer with the specified time-out value. UINT SetTimer( HWND hWnd, // handle of window for timer messages UINT nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // address of timer procedure ); Parameters hWnd Identifies the window to be associated with the timer. This window must be owned by the calling thread. If this parameter is NULL, no window is associated with the timer and the nIDEvent parameter is ignored. nIDEvent Specifies a nonzero timer identifier. If the hWnd parameter is NULL, this parameter is ignored. uElapse Specifies the time-out value, in milliseconds. lpTimerFunc Points to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc. If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message's MSG structure contains the value of the hWnd parameter. Return Values If the function succeeds, the return value is an integer identifying the new timer. An application can pass this value, or the string identifier, if it exists, to the KillTimer function to destroy the timer. If the function fails to create a timer, the return value is zero. Remarks An application can process WM_TIMER messages by including a WM_TIMER case statement in the window procedure or by specifying a TimerProc callback function when creating the timer. When you specify a TimerProc callback function, the DispatchMessage function simply calls the callback function instead of the window procedure. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER. The wParam parameter of the WM_TIMER message contains the value of the nIDEvent parameter. |
|
Intel指令手册问题
对应 2.4 的一例子: 00471762 03848D 78563412 ADD EAX,DWORD PTR SS:[EBP+ECX*4+12345678] 其中: 03 ---- primary opcode 84 ---- ModR/M byte 8D ---- SIB 78564312 ---- Address displacement |
|
.com文件格式是什么样的?[求助]
.com 是DOS下的一种可执行文件格式, 没有任何的文件头, 要求是 size<64K, DOS 直接将文件加载到 CS:100,从CS:100开始执行; 即程序在内存中与在磁盘上完全一样. |
|
问个关于获取指针指向的值的问题
RegisterClassA(CONST WNDCLASS *lpWndClass) RegisterClassExA(CONST WNDCLASSEX *lpwcx) |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值