能力值:
( LV4,RANK:50 )
|
-
-
51 楼
最初由 fly 发布 TO aaa2520: 不是完美还原IAT,但是紧接着下面的就是修复输入表
........
还有一个疑问,
dump出来的 东西,需要马上 修正oep吗?
谢谢
|
能力值:
( LV9,RANK:3410 )
|
-
-
52 楼
可以修复输入表时用ImportREC的“Fix EP To OEP”修正
|
能力值:
( LV4,RANK:50 )
|
-
-
53 楼
最初由 fly 发布 这个东东在处理输入表的时候还有时间校验,不处理的话会导致某些函数被加密 下断:BP GetTickCount 中断后取消断点返回 ........
为什么alt+f9 不能返回到主程序?
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
一个程序,用fi查 显示 Armadillo 2.5? {glue} SRT
启动后 有两个进程,看了 飞舞T恤 按键精灵3 的帖子
我也是
遇到
mov eax,dword ds:[eax+esi+4]
出错 不成功!
然后按照他下面的方法,没遇到什么问题,可是dump出来的东西不象啊,找不到FF25
好不容易 找到一个 可是后面的 jmp dword ptr:ds:[f77**]这样肯定不对吧?
接下来用了fly 这个帖子里面的方法,前面都顺利 直到最后跟踪
bp GetTickCount,不能直接返回主程序,发现不是主程序直接调用的GetTickCount,而是Loadlib api 调用的,
看来这个壳 后来就没有用GetTickCount来破坏IAT,
要是这样的话怎么找函数输入表的开始地址啊?
还有
用以上两种方法 找到的oep 不一样,到底哪个是对的?
用fly的方法dump出来的程序找到的 FF25 后面 jmp dword ptr:ds:[56449*],也挺怪,也不象,
现在糊涂了,不知道这个程序到底用的什么方式加的壳,,
还有别的方法吗?
谢谢
|
能力值:
( LV9,RANK:170 )
|
-
-
56 楼
TO fly:bp或HE WaitForDebugEvent 都断不下来,该如何处理?
|
能力值:
( LV9,RANK:3410 )
|
-
-
57 楼
TO 楼上的2位:
尽信书则不如无书。每个壳的脱壳方法可能都有些变化,建议用教程中的例子程序来演练几番,领悟技巧即可
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
???┻? ??ヘへ__.( ★ ).__へヘノ? ?┻???
? ★ ?ㄔ ??─?? ㄔㄍ ★ ?
?? ?? ?? ??
?┫ ┣?
?? 奖 状 ??
?┊ ┊?
?┊ 鉴于 FLY 同志对 脱壳教学 做出的辛勤 ┊?
?┊ ┊?
?┊ 工作决定授予此奖状加以表彰,并希望其能够 ┊?
?┊ ┊?
?┊ 再接再厉继续支持繁荣版面。 ┊?
?┤ 校长:胡景涛 ├?
??★ ? 2005年11月11日 ★??
???┳? ?ㄅ_.._((***))_.._ㄅ? ?┳???
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
在DFCG里看到有一篇“Armadillo v4.3(public)CopyMem-ll+Debug-Block加壳之VB--Crackme脱壳迷惑求解”
地址:http://www.chinadfcg.com/viewthread.php?tid=148684
上面附有两个例子
按他那样说:下bp WaitForDebugEvent(如果出现被调试程序无法处理异常,改下He WaitForDebugEvent)
但我经取消了全部断点后。再下bp WaitForDebugEvent 结果出现被调试程序无法处理异常
如查用He WaitForDebugEvent 程序就直接运行了
不能断下。
但你所说的:魔法转换(Magic Converter) V4.0正式版却很正常。为什么。
例子不能上传。望FLY能去下载回来看看
|
能力值:
( LV9,RANK:3410 )
|
-
-
62 楼
相同壳不同版本或者相同版本加壳选项不同都会使得脱壳方法有差异
你可以G WaitForDebugEvent
在WaitForDebugEvent函数末尾下断,
或者+3的位置(不要在指令语句中间)下断
抱歉,我不可能有时间去下载每个例子来脱壳
|
能力值:
( LV6,RANK:90 )
|
-
-
64 楼
当开另一个OD附加子进程时,BP OpenMutexA,Shift+F9后,提示说线程被挂起,转到了Thead窗口,但却无法恢复线程,进不下去了,如何解决?
|
能力值:
( LV6,RANK:90 )
|
-
-
66 楼
1.
00E89100 8908 mov dword ptr ds:[eax],ecx
//函数写入。在这里可以看见输入表函数开始地址005D7208,输入表处理结束后可以计算出大小=8B4
请问,输入表函数开始地址在上面哪个值看?
2.
00E891D8 8B85 DCC6FFFF mov eax,dword ptr ss:[ebp-3924]
//这里下断,中断后输入表处理完毕
这里哪个值减上面哪个值???
3.
如果有code splicing,用ARMINLINE何时处理?
|
能力值:
( LV6,RANK:90 )
|
-
-
70 楼
|
能力值:
( LV9,RANK:3410 )
|
-
-
71 楼
2、从开始位置向下拉到窗口,看
3、道理一样 子进程解压后找到Code Splicing的地方就可以用ArmInline处理了
|
能力值:
( LV6,RANK:90 )
|
-
-
72 楼
引用------------------------
下断:BP GetTickCount 中断后取消断点返回
00E88D57 FF15 AC22E900 call dword ptr ds:[E922AC] ; kernel32.GetTickCount
00E88D5D 8985 8CC3FFFF mov dword ptr ss:[ebp-3C74],eax
//返回这里
00E88D63 6A 01 push 1
00E88D65 58 pop eax
00E88D66 85C0 test eax,eax
00E88D68 0F84 A8030000 je 00E89116
下面还有一处GetTickCount取时间
00E89100 8908 mov dword ptr ds:[eax],ecx
//函数写入。在这里可以看见输入表函数开始地址005D7208,输入表处理结束后可以计算出大小=8B4
00E89102 8B85 FCC7FFFF mov eax,dword ptr ss:[ebp-3804]
00E89108 83C0 04 add eax,4
00E8910B 8985 FCC7FFFF mov dword ptr ss:[ebp-3804],eax
00E89111 E9 4DFCFFFF jmp 00E88D63
00E89116 FF15 AC22E900 call dword ptr ds:[E922AC] ; kernel32.GetTickCount
00E8911C 2B85 8CC3FFFF sub eax,dword ptr ss:[ebp-3C74]
00E89122 8B8D 90C3FFFF mov ecx,dword ptr ss:[ebp-3C70]
00E89128 6BC9 32 imul ecx,ecx,32
00E8912B 81C1 D0070000 add ecx,7D0
00E89131 3BC1 cmp eax,ecx
//时间校验
00E89133 76 07 jbe short 00E8913C
//修改为:JMP 00E8913C ★
00E89135 C685 20C8FFFF 0>mov byte ptr ss:[ebp-37E0],1
00E8913C 83BD D0C6FFFF 0>cmp dword ptr ss:[ebp-3930],0
00E89143 0F85 8A000000 jnz 00E891D3
00E891B8 83C4 0C add esp,0C
00E891BB 8B85 58C8FFFF mov eax,dword ptr ss:[ebp-37A8]
00E891C1 8985 A49EFFFF mov dword ptr ss:[ebp+FFFF9EA4],eax
00E891C7 FFB5 A49EFFFF push dword ptr ss:[ebp+FFFF9EA4]
00E891CD E8 64820000 call 00E91436 ; jmp to msvcrt.operator delete
00E891D2 59 pop ecx
00E891D3 E9 05F7FFFF jmp 00E888DD
00E891D8 8B85 DCC6FFFF mov eax,dword ptr ss:[ebp-3924]
//这里下断,中断后输入表处理完毕
---------------------------
我在按教程unpack一程序的时候,如下:
00AE6FFD 8908 mov dword ptr ds:[eax],ecx
////函数写入。在这里可以看见输入表函数开始地址[eax];
00AE6FFF 8B85 04C8FFFF mov eax,dword ptr ss:[ebp-37FC]
00AE7005 83C0 04 add eax,4
00AE7008 8985 04C8FFFF mov dword ptr ss:[ebp-37FC],eax
00AE700E ^ E9 CEFCFFFF jmp 00AE6CE1
00AE7013 FF15 9C02AF00 call dword ptr ds:[AF029C] ; kernel32.GetTickCount
00AE7019 2B85 94C4FFFF sub eax,dword ptr ss:[ebp-3B6C]
00AE701F 8B8D 98C4FFFF mov ecx,dword ptr ss:[ebp-3B68]
00AE7025 6BC9 32 imul ecx,ecx,32
00AE7028 81C1 D0070000 add ecx,7D0
00AE702E 3BC1 cmp eax,ecx
00AE7030 EB 07 jbe short 00AE7039---修改为JMP;
00AE7032 C685 28C8FFFF 0>mov byte ptr ss:[ebp-37D8],1
00AE7039 83BD D8C6FFFF 0>cmp dword ptr ss:[ebp-3928],0
00AE7040 0F85 8A000000 jnz 00AE70D0
00AE7046 0FB685 84C4FFFF movzx eax,byte ptr ss:[ebp-3B7C]
00AE704D 85C0 test eax,eax
00AE704F 74 7F je short 00AE70D0
00AE7051 6A 00 push 0
...
...
...
0AE708E 50 push eax
00AE708F E8 EC7D0000 call 00AEEE80 ; jmp to msvcrt.memcpy
00AE7094 83C4 0C add esp,0C
00AE7097 6A 01 push 1
00AE7099 8B85 88C4FFFF mov eax,dword ptr ss:[ebp-3B78]
00AE709F C1E0 02 shl eax,2
00AE70A2 50 push eax
00AE70A3 8B85 00C7FFFF mov eax,dword ptr ss:[ebp-3900]
00AE70A9 0385 80C4FFFF add eax,dword ptr ss:[ebp-3B80]
00AE70AF 50 push eax
00AE70B0 E8 341B0000 call 00AE8BE9
00AE70B5 83C4 0C add esp,0C
00AE70B8 8B85 60C8FFFF mov eax,dword ptr ss:[ebp-37A0]
00AE70BE 8985 C8AFFFFF mov dword ptr ss:[ebp+FFFFAFC8],eax
00AE70C4 FFB5 C8AFFFFF push dword ptr ss:[ebp+FFFFAFC8]
00AE70CA E8 AB7D0000 call 00AEEE7A ; jmp to msvcrt.operator delete
00AE70CF 59 pop ecx
00AE70D0 83BD D8C6FFFF 0>cmp dword ptr ss:[ebp-3928],0
00AE70D7 75 2A jnz short 00AE7103
00AE70D9 8D85 7CC4FFFF lea eax,dword ptr ss:[ebp-3B84]
00AE70DF 50 push eax
00AE70E0 FFB5 7CC4FFFF push dword ptr ss:[ebp-3B84]
00AE70E6 8B85 88C4FFFF mov eax,dword ptr ss:[ebp-3B78]
00AE70EC C1E0 02 shl eax,2
00AE70EF 50 push eax
00AE70F0 8B85 00C7FFFF mov eax,dword ptr ss:[ebp-3900]
00AE70F6 0385 80C4FFFF add eax,dword ptr ss:[ebp-3B80]
00AE70FC 50 push eax
00AE70FD FF15 4801AF00 call dword ptr ds:[AF0148] ; kernel32.VirtualProtect
00AE7103 ^ E9 E3F7FFFF jmp 00AE68EB
00AE7108 8B85 E4C6FFFF mov eax,dword ptr ss:[ebp-391C]
00AE710E 8985 C4AFFFFF mov dword ptr ss:[ebp+FFFFAFC4],eax
00AE7114 FFB5 C4AFFFFF push dword ptr ss:[ebp+FFFFAFC4]
00AE711A E8 5B7D0000 call 00AEEE7A ; jmp to msvcrt.operator delete
00AE711F 59 pop ecx
00AE7120 83BD D8C6FFFF 0>cmp dword ptr ss:[ebp-3928],0
00AE7127 0F84 59010000 je 00AE7286
00AE712D A1 2800B000 mov eax,dword ptr ds:[B00028]
00AE7132 8B40 58 mov eax,dword ptr ds:[eax+58]
00AE7135 8985 D4ADFFFF mov dword ptr ss:[ebp+FFFFADD4],eax
00AE713B 8B85 D4ADFFFF mov eax,dword ptr ss:[ebp+FFFFADD4]
00AE7141 8985 44C1FFFF mov dword ptr ss:[ebp-3EBC],eax
00AE7147 E8 8D360000 call 00AEA7D9
00AE714C F7D8 neg eax
00AE714E 1BC0 sbb eax,eax
00AE7150 25 00010000 and eax,100
00AE7155 05 00010000 add eax,100
00AE715A 8985 C0ADFFFF mov dword ptr ss:[ebp+FFFFADC0],eax
00AE7160 68 0D5EDF01 push 1DF5E0D
00AE7165 FFB5 44C1FFFF push dword ptr ss:[ebp-3EBC]
00AE716B 8D8D 44C1FFFF lea ecx,dword ptr ss:[ebp-3EBC]
00AE7171 E8 FB9EFDFF call 00AC1071
00AE7176 40 inc eax
请教前辈最后一次下断在哪里合适,另:如何察看函数输入表结束位置,以便于计算Size。还请赐教,希望能解说详细。比如Fly说的最后看函数表是否结束,在数据窗口往下拉,可否直接将Data贴出来我看看,这样比较形象。
|
能力值:
( LV9,RANK:3410 )
|
-
-
73 楼
最后一次下断 ?
以记事本为例来解释一下看输入表函数表的结束
随便在代码中找个函数调用
004010D3 FF15 E0634000 call dword ptr ds:[4063E0]; kernel32.GetCommandLineA
数据窗口中跟随4063E0
点 右键->长型->地址
这样在数据窗口中上下拉动滚动条,可以看的清晰点
004062DC 00000000
004062E0 77DAEBE7 ADVAPI32.RegSetValueExA
004062E4 77DA7883 ADVAPI32.RegQueryValueExA
004062E8 77DA6BF0 ADVAPI32.RegCloseKey
004062EC 77DCC41B ADVAPI32.RegOpenKeyA
004062F0 77DCD5BB ADVAPI32.RegCreateKeyA
004062F4 00000000
004062F8 77EF61E1 GDI32.GetStockObject
004062FC 77EF8C33 GDI32.GetObjectA
00406300 77EF5A8A GDI32.GetDeviceCaps
00406304 77EF5B90 GDI32.SelectObject
00406308 77EF6C2D GDI32.DeleteObject
0040630C 77F23822 GDI32.AbortDoc
00406310 77F0E051 GDI32.EndDoc
00406314 77EF6E98 GDI32.DeleteDC
00406318 77F0F126 GDI32.StartPage
0040631C 77F249C9 GDI32.StartDocA
00406320 77F0DDC9 GDI32.EndPage
00406324 77EFE670 GDI32.GetTextExtentPointA
00406328 77F1B260 GDI32.CreateFontA
0040632C 77F23942 GDI32.SetAbortProc
00406330 77EF5EFB GDI32.SetBkMode
00406334 77EF9A1A GDI32.SetMapMode
00406338 77EFE068 GDI32.GetTextMetricsA
0040633C 77F06C8F GDI32.SetWindowExtEx
00406340 77F06D38 GDI32.SetViewportExtEx
00406344 77EFD526 GDI32.LPtoDP
00406348 77EFB251 GDI32.CreateDCA
0040634C 77EFA0B9 GDI32.GetTextCharset
00406350 77EFE8D6 GDI32.CreateFontIndirectA
00406354 00000000
00406358 7C81E85C kernel32.DeleteFileA
0040635C 7C827778 kernel32._lcreat
00406360 7C85E610 kernel32._lopen
00406364 7C838D93 kernel32._lwrite
00406368 7C822E21 kernel32.LocalUnlock
0040636C 7C839450 kernel32._llseek
00406370 7C80995D kernel32.LocalFree
00406374 7C8099BD kernel32.LocalAlloc
00406378 7C839308 kernel32._lclose
0040637C 7C80FF2D kernel32.GlobalAlloc
00406380 7C80C9C1 kernel32.GetLocalTime
00406384 7C826F4B kernel32.GetTimeFormatA
00406388 7C826E0C kernel32.GetDateFormatA
0040638C 7C80B929 kernel32.lstrcmpiA
00406390 7C801EEE kernel32.GetStartupInfoA
00406394 7C80B529 kernel32.GetModuleHandleA
00406398 7C81CAA2 kernel32.ExitProcess
0040639C 7C810311 kernel32.lstrcpynA
004063A0 7C822D88 kernel32.LocalLock
004063A4 7C81E2B1 kernel32.LocalReAlloc
004063A8 7C822D47 kernel32.GetProfileStringA
004063AC 7C923151 ntdll.RtlMoveMemory
004063B0 7C80C6E0 kernel32.lstrlenA
004063B4 7C80EFD7 kernel32.FindClose
004063B8 7C81EE79 kernel32.lstrcmpA
004063BC 7C813559 kernel32.FindFirstFileA
004063C0 7C801A24 kernel32.CreateFileA
004063C4 7C838FB9 kernel32.lstrcatA
004063C8 7C930331 ntdll.RtlGetLastWin32Error
004063CC 7C80D47E kernel32.GetLocaleInfoA
004063D0 7C8097F4 kernel32.MulDiv
004063D4 7C80C729 kernel32.lstrcpyA
004063D8 7C810082 kernel32.GlobalUnlock
004063DC 7C80FE2F kernel32.GlobalFree
004063E0 7C812C8D kernel32.GetCommandLineA
004063E4 7C839418 kernel32._lread
004063E8 7C810119 kernel32.GlobalLock
004063EC 00000000
004063F0 7D610E80 SHELL32.ShellExecuteA
004063F4 7D5FAF0C SHELL32.DragAcceptFiles
004063F8 7D632362 SHELL32.ShellAboutA
004063FC 7D6882B2 SHELL32.SHGetSpecialFolderPathA
00406400 7D6469FE SHELL32.DragQueryFileA
00406404 7D6469ED SHELL32.DragFinish
00406408 00000000
0040640C 77D1A8AD USER32.wsprintfA
00406410 77D3023D USER32.CloseClipboard
00406414 77D2F13E USER32.IsClipboardFormatAvailable
00406418 77D3024F USER32.OpenClipboard
0040641C 77D3148B USER32.GetMenu
00406420 77D20FE8 USER32.LoadStringA
00406424 77D31524 USER32.LoadAcceleratorsA
00406428 77D1DB70 USER32.GetSystemMenu
0040642C 77D18E28 USER32.RegisterWindowMessageA
00406430 77D1D60D USER32.SetWindowLongA
00406434 77D2025E USER32.CreateWindowExA
00406438 77D20B3E USER32.LoadCursorA
0040643C 77D237E6 USER32.RegisterClassExA
00406440 77D18F9D USER32.GetSystemMetrics
00406444 77D1D7F9 USER32.UpdateWindow
00406448 77D20FBA USER32.CharPrevA
0040644C 77D1B6AE USER32.GetClientRect
00406450 77D1C96C USER32.PeekMessageA
00406454 77D3C94A USER32.SetDlgItemTextA
00406458 77D5A19D USER32.TabbedTextOutA
0040645C 77D3C7B3 USER32.CreateDialogParamA
00406460 77D1BE71 USER32.EnableWindow
00406464 77D3213C USER32.GetWindowTextA
00406468 77D3C2BF USER32.SendDlgItemMessageA
0040646C 77D1D869 USER32.GetDlgCtrlID
00406470 77D2BAAF USER32.ChildWindowFromPoint
00406474 77D1BDC8 USER32.ScreenToClient
00406478 77D1BD76 USER32.GetCursorPos
0040647C 77D6AC1E USER32.GetDlgItemTextA
00406480 77D216E2 USER32.GetSubMenu
00406484 77D31A8E USER32.CheckMenuItem
00406488 77D20F90 USER32.CharNextA
0040648C 77D3C661 USER32.IsDialogMessageA
00406490 77D2FA9C USER32.TranslateAcceleratorA
00406494 77D18BF6 USER32.TranslateMessage
00406498 77D21211 USER32.PostQuitMessage
0040649C 77D1BE27 USER32.IsIconic
004064A0 77D1DAEA USER32.DestroyWindow
004064A4 77D31F4C USER32.MessageBeep
004064A8 77D504EA USER32.MessageBoxA
004064AC 77D1D4EE USER32.DefWindowProcA
004064B0 77D1EA2F USER32.EnableMenuItem
004064B4 77D3154B USER32.GetLastActivePopup
004064B8 77D1D8A4 USER32.ShowWindow
004064BC 77D26250 USER32.EndDialog
004064C0 77D24795 USER32.SetForegroundWindow
004064C4 77D3EE35 USER32.WinHelpA
004064C8 77D21324 USER32.LoadIconA
004064CC 77D186C7 USER32.GetDC
004064D0 77D1869D USER32.ReleaseDC
004064D4 77D1BF58 USER32.SetCursor
004064D8 77D2F39A USER32.SendMessageA
004064DC 77D1BEF0 USER32.GetFocus
004064E0 77D1CB85 USER32.PostMessageA
004064E4 77D1DA60 USER32.SetFocus
004064E8 77D1B5F5 USER32.InvalidateRect
004064EC 77D1DBEC USER32.MoveWindow
004064F0 77D196B8 USER32.DispatchMessageA
004064F4 77D21042 USER32.GetMessageA
004064F8 77D2F543 USER32.SetWindowTextA
004064FC 00000000
00406500 7632311E comdlg32.GetOpenFileNameA
00406504 7633C289 comdlg32.ChooseFontA
00406508 7633867C comdlg32.FindTextA
0040650C 763447B1 comdlg32.PageSetupDlgA
00406510 76337CD8 comdlg32.GetSaveFileNameA
00406514 763300CE comdlg32.CommDlgExtendedError
00406518 76322533 comdlg32.GetFileTitleA
0040651C 00000000
如何看输入表函数开始和结束的地址知道了吧?
|
能力值:
( LV6,RANK:90 )
|
-
-
74 楼
感谢Fly的及时回复,我指的最后一次下断是指
“00E891D8 8B85 DCC6FFFF mov eax,dword ptr ss:[ebp-3924]
//这里下断,中断后输入表处理完毕
”这句,我调试的程序跟你的有些偏差,由于是初次调试,所以不知道在哪里下断。
也许问的问题比较菜,让大家见笑了,呵呵。
|
能力值:
( LV9,RANK:3410 )
|
-
-
75 楼
看看这段代码:
00E89131 3BC1 cmp eax,ecx
//时间校验
00E89133 76 07 jbe short 00E8913C
//修改为:JMP 00E8913C ★
00E89135 C685 20C8FFFF 0>mov byte ptr ss:[ebp-37E0],1
00E8913C 83BD D0C6FFFF 0>cmp dword ptr ss:[ebp-3930],0
00E89143 0F85 8A000000 jnz 00E891D3
//00E891D3
00E891D3 E9 05F7FFFF jmp 00E888DD
//循环
00E891D8 8B85 DCC6FFFF mov eax,dword ptr ss:[ebp-3924]
//这里下断,中断后输入表处理完毕
00E891D8在循环外
|