━━━━━━━━━━━━━━━━━━━━━━━━━━
00400154 >8725 28A54400 xchg dword ptr ds:,esp //OD载入
0040015A 61 popad //单步F8
0040015B 94 xchg eax,esp //到这里时注意堆栈窗口
0040015C 55 push ebp
0040015D A4 movs byte ptr es:,byte ptr ds:
0040015E B6 80 mov dh,80
00400160 FF13 call dword ptr ds:
00400162^ 73 F9 jnb short LordPE.0040015D
━━━━━━━━━━━━━━━━━━━━━━━━━━
0044A52C 004001E8LordPE.004001E8
0044A530 004001DCLordPE.004001DC
0044A534 004001DELordPE.004001DE //堆栈窗口
0044A538 00404340LordPE.00404340 //此时在这里右键反汇编窗口中跟随,(此时的00404340就是我们的OEP)
0044A53C > 7C801D77kernel32.LoadLibraryA
0044A540 > 7C80ADA0kernel32.GetProcAddress
0044A544 00000000
━━━━━━━━━━━━━━━━━━━━━━━━━━
00404340 0000 add byte ptr ds:,al //反汇编窗口跟随时会显示未解码的样式删除模块分析就可以成需要啦
00404342 0000 add byte ptr ds:,al //我们就在上面的00404340处执行右键断点,设置硬件执行断点
00404344 0000 add byte ptr ds:,al //设置好硬件断点,F8运行一下就停在了OEP
00404346 0000 add byte ptr ds:,al
00404348 0000 add byte ptr ds:,al
0040434A 0000 add byte ptr ds:,al
0040434C 0000 add byte ptr ds:,al
0040434E 0000 add byte ptr ds:,al
00404350 0000 add byte ptr ds:,al
00404352 0000 add byte ptr ds:,al
━━━━━━━━━━━━━━━━━━━━━━━━━━
00404340 51 push ecx //这里即是我们的OEP
00404341 56 push esi //此时dump程序运行 lmportrce 修复会出现就一排指针,一般除VB程序外其他语言都不可能的
00404342 6A 00 push 0 //我们注意下面这句 call dword ptr ds:,我们在命令栏输入 d 419160,回车
00404344 FF15 60914100 call dword ptr ds: //注意数据窗口
0040434A A3 5CE74100 mov dword ptr ds:,eax
0040434F E8 BC000000 call LordPE.00404410
00404354 8B35 D8904100 mov esi,dword ptr ds: ; kernel32.ExitProcess
0040435A 85C0 test eax,eax
0040435C 75 04 jnz short LordPE.00404362
━━━━━━━━━━━━━━━━━━━━━━━━━━
004191607C80B6A1kernel32.GetModuleHandleA //我们此时停在这里
004191647C801A24kernel32.CreateFileA //拖动滚动条向上,找带有第一句带有API函数的
004191687C80ADA0kernel32.GetProcAddress
0041916C7C80220Fkernel32.WriteProcessMemory
004191707C809920kernel32.GetCurrentProcessId
004191747C802442kernel32.Sleep
004191787C80180Ekernel32.ReadFile
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041900C77DAEAF4ADVAPI32.RegCreateKeyExA //找到这一句就是最上面啦,这个1900c也就是我们的 RVA
0041901077DAEBE7ADVAPI32.RegSetValueExA //此时运行我们的 lmportrce OEP填写 4340 RVA填上1900C 大小填上1000就好
0041901477DCD11BADVAPI32.LookupPrivilegeValueA //会发现没有一个有效指针,点显示无效---右键剪切掉指针即可
0041901877DA7753ADVAPI32.OpenProcessToken //剪切指针后会发现全部有效啦,有186个指针,抓取我们dump出去的程序
0041901C77DCC123ADVAPI32.RegDeleteKeyA //运行成功,收工 明白了。。哈哈。。。原来是这样。。。还是FSG经典入口形式比PEID查的OEP准啊。。谢谢。。对了。怎么标记已解决啊? 首先你要明白什么是无效指针,一般的可以剪掉,但对于把你自定义的部份代码抽到的壳里运行的部份加密壳,在没有修复脚本前,没办法的情况下要自己跟踪,得到解码后的代码,自己去建一个空区段,然后把获得的代码粘过去,这是要修改 ESI 等指针数据,指向新代码地址,需然不是什么技术活,但确全是体力劳动,那个累,说起都害怕
[ 本帖最后由 lgjxj 于 2008-9-25 19:19 编辑 ] 恩,谢谢~~~~
页:
1
[2]