能力值:
( LV4,RANK:50 )
|
-
-
2 楼
Themida
|
能力值:
( LV9,RANK:170 )
|
-
-
3 楼
感谢!!!
|
能力值:
( LV9,RANK:170 )
|
-
-
4 楼
想继续问一下,论坛是否可以请求有偿脱壳。
太久没用过汇编和OLLYICE,快捷键都忘记差不多了,
这个软件是免费的,帮朋友在上面写个小助手,方便快速下单平单,有些确认对话框要去掉。所以需要脱壳,适当改几行汇编。
如果有人有意向收费脱壳,请站内短信。如果违规,麻烦版主删除回复。
壳信息:
[!] Themida v2.0.1.0 - v2.1.2.0 (or newer) detected !
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
个人信息中更新了QQ号。谢谢!
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
直接HOOK 脱壳改多麻烦
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
Themida 的壳,脱了也没意义,因为有虚拟机
|
能力值:
( LV9,RANK:170 )
|
-
-
8 楼
对,多谢提醒!
这也是一个办法。程序运行起来后直接对内存相关的地方改写一下。
|
能力值:
( LV9,RANK:170 )
|
-
-
9 楼
如果要修改的地方没有变形,可以直接修改文件,有一定的意义。虚拟机,只是将部分代码虚拟化了吧?
|
能力值:
( LV9,RANK:270 )
|
-
-
10 楼
壳代码后的程序入口:
[FONT="Courier"]00401000 /EB 10 JMP SHORT 00401012 ; OEP / Near OEP
00401002 |66:623A BOUND DI, [EDX] ; "fb:C++HOOK", 0x90
00401005 |43 INC EBX
00401006 |2B2B SUB EBP, [EBX]
00401008 |48 DEC EAX
00401009 |4F DEC EDI
0040100A |4F DEC EDI
0040100B |4B DEC EBX
0040100C |90 NOP
0040100D |E9 70E97500 JMP 00B5F982
00401012 \A1 63E97500 MOV EAX, [0x75E963]
00401017 C1E0 02 SHL EAX, 0x2
0040101A A3 67E97500 MOV [0x75E967], EAX
0040101F 52 PUSH EDX
00401020 6A 00 PUSH 0x0
00401022 E8 67C33500 CALL 0075D38E ; JMP to kernel32.GetModuleHandleA
00401027 8BD0 MOV EDX, EAX
00401029 E8 CE241700 CALL 005734FC
0040102E 5A POP EDX
0040102F E8 CECB3500 CALL 0075DC02 ; JMP to OFFSET Cc3250mt.___CRTL_MEM_UseBorMM
00401034 E8 07251700 CALL 00573540
00401039 6A 00 PUSH 0x0
0040103B E8 6C261700 CALL 005736AC
00401040 59 POP ECX
00401041 68 0CE97500 PUSH 0075E90C
00401046 6A 00 PUSH 0x0
00401048 E8 41C33500 CALL 0075D38E ; JMP to kernel32.GetModuleHandleA
0040104D A3 6BE97500 MOV [0x75E96B], EAX
00401052 6A 00 PUSH 0x0
00401054 E9 75CC3500 JMP 0075DCCE ; JMP to OFFSET Cc3250mt.__startup
00401059 > E9 9A261700 JMP 005736F8
0040105E 33C0 XOR EAX, EAX
00401060 A0 55E97500 MOV AL, [0x75E955]
00401065 C3 RETN
00401066 A1 6BE97500 MOV EAX, [0x75E96B]
0040106B C3 RETN
0040106C 60 PUSHAD
0040106D BB 0050B0BC MOV EBX, 0xBCB05000
00401072 53 PUSH EBX
00401073 68 AD0B0000 PUSH 0xBAD
00401078 C3 RETN
00401079 B9 9C000000 MOV ECX, 0x9C
0040107E 0BC9 OR ECX, ECX
00401080 74 4D JE SHORT 004010CF
00401082 833D 63E97500 00 CMP DWORD PTR [0x75E963], 0x0
00401089 73 0A JNB SHORT 00401095
0040108B B8 FE000000 MOV EAX, 0xFE
00401090 E8 D7FFFFFF CALL 0040106C
00401095 B9 9C000000 MOV ECX, 0x9C
0040109A 51 PUSH ECX
0040109B 6A 08 PUSH 0x8
0040109D E8 10C33500 CALL 0075D3B2 ; JMP to kernel32.GetProcessHeap
004010A2 50 PUSH EAX
004010A3 E8 52C33500 CALL 0075D3FA ; JMP to ntdll.RtlAllocateHeap
004010A8 0BC0 OR EAX, EAX
004010AA 75 0A JNZ SHORT 004010B6
004010AC B8 FD000000 MOV EAX, 0xFD
004010B1 E8 B6FFFFFF CALL 0040106C
004010B6 50 PUSH EAX
004010B7 50 PUSH EAX
004010B8 FF35 63E97500 PUSH DWORD PTR [0x75E963]
004010BE E8 63CB3500 CALL 0075DC26 ; JMP to OFFSET Cc3250mt.___CRTL_TLS_SetValue
004010C3 FF35 63E97500 PUSH DWORD PTR [0x75E963]
004010C9 E8 52CB3500 CALL 0075DC20 ; JMP to OFFSET Cc3250mt.___CRTL_TLS_InitThread
004010CE 5F POP EDI
004010CF C3 RETN
004010D0 B9 9C000000 MOV ECX, 0x9C
004010D5 0BC9 OR ECX, ECX
004010D7 74 19 JE SHORT 004010F2
004010D9 E8 2ACB3500 CALL 0075DC08 ; JMP to OFFSET Cc3250mt.___CRTL_TLS_Alloc
004010DE A3 63E97500 MOV [0x75E963], EAX
004010E3 83F8 00 CMP EAX, 0x0
004010E6 73 91 JNB SHORT 00401079
004010E8 B8 FC000000 MOV EAX, 0xFC
004010ED E8 7AFFFFFF CALL 0040106C
004010F2 C3 RETN
004010F3 833D 63E97500 00 CMP DWORD PTR [0x75E963], 0x0
004010FA 72 28 JB SHORT 00401124
004010FC FF35 63E97500 PUSH DWORD PTR [0x75E963]
00401102 E8 13CB3500 CALL 0075DC1A ; JMP to OFFSET Cc3250mt.___CRTL_TLS_GetValue
00401107 0BC0 OR EAX, EAX
00401109 74 19 JE SHORT 00401124
0040110B 50 PUSH EAX
0040110C 6A 08 PUSH 0x8
0040110E E8 9FC23500 CALL 0075D3B2 ; JMP to kernel32.GetProcessHeap
00401113 50 PUSH EAX
00401114 E8 E7C23500 CALL 0075D400 ; JMP to ntdll.RtlFreeHeap
00401119 FF35 63E97500 PUSH DWORD PTR [0x75E963]
0040111F E8 EACA3500 CALL 0075DC0E ; JMP to OFFSET Cc3250mt.___CRTL_TLS_ExitThread
00401124 C3 RETN
00401125 C3 RETN
00401126 833D 63E97500 00 CMP DWORD PTR [0x75E963], 0x0
0040112D 72 10 JB SHORT 0040113F
0040112F E8 BFFFFFFF CALL 004010F3
00401134 FF35 63E97500 PUSH DWORD PTR [0x75E963]
0040113A E8 D5CA3500 CALL 0075DC14 ; JMP to OFFSET Cc3250mt.___CRTL_TLS_Free
0040113F C3 RETN
00401140 A1 63E97500 MOV EAX, [0x75E963]
00401145 64:67:8B16 2C00 MOV EDX, FS:[0x2C]
0040114B 8B0482 MOV EAX, [EDX+EAX*4]
0040114E C3 RETN[/FONT]
注意头部的TAG:"fb:C++HOOK",为Borland C++ 1999的签名。
阻止Themida的API保护后,导入函数被“还原”,否则没法看懂程序:
[FONT="Courier"]Target
======
"C:\徽商期货博易大师交易版\pobo5\system\pobo.exe"
CodeBase: 00401000
CodeSize: 004E3000
Align: ED060014
Shadow kernel32.dll at: 012E0000
Encrypted Imports at: 00C20F31
Imported Libraries:
40000000 Vcl50
402F0000 Vclx50
50800000 bcbie50
41000000 Borlndmm
77DA0000 advapi32
7C800000 kernel32
77BD0000 version
71A40000 wsock32
77180000 comctl32
76320000 comdlg32
77EF0000 gdi32
7D590000 shell32
77D10000 user32
76B10000 winmm
76990000 ole32
770F0000 oleaut32
32500000 Cc3250mt
03000000 dbghelp
10000000 PBMsgBox
762F0000 msimg32
0075BDB4 FF25 70058C00 JMP NEAR [0x8C0570] ; Vcl50.@System@initialization$qqrv
0075BDBA FF25 74058C00 JMP NEAR [0x8C0574] ; Vcl50.@System@Finalization$qqrv
0075BDC0 FF25 78058C00 JMP NEAR [0x8C0578] ; Vcl50.@System@LoadResString$qqrp20System@TResStringRec
0075BDC6 FF25 7C058C00 JMP NEAR [0x8C057C] ; Vcl50.@System@UnregisterModule$qqrp17System@TLibModule
...
0075D2B0 FF25 A8218C00 JMP NEAR [0x8C21A8] ; advapi32.AdjustTokenPrivileges
0075D2B6 FF25 AC218C00 JMP NEAR [0x8C21AC] ; advapi32.LookupPrivilegeValueA
0075D2BC FF25 B0218C00 JMP NEAR [0x8C21B0] ; advapi32.OpenProcessToken
0075D2C2 FF25 B4218C00 JMP NEAR [0x8C21B4] ; advapi32.RegCloseKey
0075D2C8 FF25 B8218C00 JMP NEAR [0x8C21B8] ; advapi32.RegOpenKeyExA
0075D2CE FF25 BC218C00 JMP NEAR [0x8C21BC] ; advapi32.RegQueryValueExA
0075D2D4 FF25 50238C00 JMP NEAR [0x8C2350] ; kernel32.Beep
0075D2DA FF25 54238C00 JMP NEAR [0x8C2354] ; kernel32.CloseHandle
0075D2E0 FF25 58238C00 JMP NEAR [0x8C2358] ; kernel32.CopyFileA
0075D2E6 FF25 5C238C00 JMP NEAR [0x8C235C] ; kernel32.CreateDirectoryA
0075D2EC FF25 60238C00 JMP NEAR [0x8C2360] ; kernel32.CreateFileA
0075D2F2 FF25 64238C00 JMP NEAR [0x8C2364] ; kernel32.CreateFileMappingA
0075D2F8 FF25 68238C00 JMP NEAR [0x8C2368] ; kernel32.CreateProcessA
0075D2FE FF25 6C238C00 JMP NEAR [0x8C236C] ; kernel32.CreateThread
0075D304 FF25 70238C00 JMP NEAR [0x8C2370] ; ntdll.RtlDeleteCriticalSection
0075D30A FF25 74238C00 JMP NEAR [0x8C2374] ; kernel32.DeleteFileA
0075D310 FF25 78238C00 JMP NEAR [0x8C2378] ; ntdll.RtlEnterCriticalSection
0075D316 FF25 7C238C00 JMP NEAR [0x8C237C] ; kernel32.FileTimeToLocalFileTime
0075D31C FF25 80238C00 JMP NEAR [0x8C2380] ; kernel32.FileTimeToSystemTime
0075D322 FF25 84238C00 JMP NEAR [0x8C2384] ; kernel32.FindClose
0075D328 FF25 88238C00 JMP NEAR [0x8C2388] ; kernel32.FindFirstFileA
0075D32E FF25 8C238C00 JMP NEAR [0x8C238C] ; kernel32.FindNextFileA
0075D334 FF25 90238C00 JMP NEAR [0x8C2390] ; kernel32.FreeLibrary
0075D33A FF25 94238C00 JMP NEAR [0x8C2394] ; kernel32.GetACP
0075D340 FF25 98238C00 JMP NEAR [0x8C2398] ; kernel32.GetCommandLineA
0075D346 FF25 9C238C00 JMP NEAR [0x8C239C] ; kernel32.GetCurrentDirectoryA
0075D34C FF25 A0238C00 JMP NEAR [0x8C23A0] ; kernel32.GetCurrentProcess
0075D352 FF25 A4238C00 JMP NEAR [0x8C23A4] ; kernel32.GetCurrentProcessId
0075D358 FF25 A8238C00 JMP NEAR [0x8C23A8] ; kernel32.GetCurrentThreadId
0075D35E FF25 AC238C00 JMP NEAR [0x8C23AC] ; kernel32.GetDiskFreeSpaceA
0075D364 FF25 B0238C00 JMP NEAR [0x8C23B0] ; kernel32.GetExitCodeThread
0075D36A FF25 B4238C00 JMP NEAR [0x8C23B4] ; kernel32.GetFileSize
0075D370 FF25 B8238C00 JMP NEAR [0x8C23B8] ; kernel32.GetFileTime
0075D376 FF25 BC238C00 JMP NEAR [0x8C23BC] ; kernel32.GetFullPathNameA
0075D37C FF25 C0238C00 JMP NEAR [0x8C23C0] ; ntdll.RtlGetLastWin32Error
0075D382 FF25 C4238C00 JMP NEAR [0x8C23C4] ; kernel32.GetLocalTime
0075D388 FF25 C8238C00 JMP NEAR [0x8C23C8] ; kernel32.GetModuleFileNameA
0075D38E FF25 CC238C00 JMP NEAR [0x8C23CC] ; kernel32.GetModuleHandleA
0075D394 FF25 D0238C00 JMP NEAR [0x8C23D0] ; kernel32.GetPrivateProfileIntA
0075D39A FF25 D4238C00 JMP NEAR [0x8C23D4] ; kernel32.GetPrivateProfileSectionA
0075D3A0 FF25 D8238C00 JMP NEAR [0x8C23D8] ; kernel32.GetPrivateProfileSectionNamesA
0075D3A6 FF25 DC238C00 JMP NEAR [0x8C23DC] ; kernel32.GetPrivateProfileStringA
0075D3AC FF25 E0238C00 JMP NEAR [0x8C23E0] ; kernel32.GetProcAddress
0075D3B2 FF25 E4238C00 JMP NEAR [0x8C23E4] ; kernel32.GetProcessHeap
0075D3B8 FF25 E8238C00 JMP NEAR [0x8C23E8] ; kernel32.GetSystemInfo
0075D3BE FF25 EC238C00 JMP NEAR [0x8C23EC] ; kernel32.GetSystemTime
...
0075DE6C FF25 90318C00 JMP NEAR [0x8C3190] ; Cc3250mt._vsnprintf
0075DE72 FF25 94318C00 JMP NEAR [0x8C3194] ; Cc3250mt._wcscpy
0075DE78 FF25 A4318C00 JMP NEAR [0x8C31A4] ; dbghelp.MiniDumpWriteDump
0075DE7E CC INT3
0075DE7F CC INT3
0075DE80 FF25 B8318C00 JMP NEAR [0x8C31B8] ; PBMsgBox.PBMsgBoxEx_Initialize
0075DE86 FF25 BC318C00 JMP NEAR [0x8C31BC] ; PBMsgBox.PBMsgBoxEx_MessageBox
0075DE8C FF25 CC318C00 JMP NEAR [0x8C31CC] ; msimg32.AlphaBlend
0075DE92 CC INT3
0075DE93 CC INT3
...
008C2E68 325012B0 OFFSET Cc3250mt.@$bdele$qpv
008C2E6C 325012C0 OFFSET Cc3250mt.@$bdla$qpv
008C2E70 325012E4 OFFSET Cc3250mt.@$bnew$qui
...
008C318C 325800CC OFFSET Cc3250mt._time
008C3190 32565A30 OFFSET Cc3250mt._vsnprintf
008C3194 32550A4C OFFSET Cc3250mt._wcscpy
008C3198 00000000
008C319C 00000000
008C31A0 5D424E5A
008C31A4 0305C560 dbghelp.MiniDumpWriteDump
008C31A8 00000000
008C31AC 00000000
008C31B0 00000000
008C31B4 381FE9D5
008C31B8 10009F30 PBMsgBox.PBMsgBoxEx_Initialize
008C31BC 1000A0B0 PBMsgBox.PBMsgBoxEx_MessageBox
008C31C0 00000000
008C31C4 00000000
008C31C8 5D5483C5
008C31CC 762F119B msimg32.AlphaBlend
008C31D0 00000000
008C31D4 00000000[/FONT]
不懂Borland的VCL,所以就帮不上了。
|
能力值:
( LV9,RANK:170 )
|
-
-
11 楼
[QUOTE=MistHill;1415676]壳代码后的程序入口:
00401000 /EB 10 JMP SHORT 00401012 ; OEP / Near OEP
00401002 |66:623A BOUND DI, [EDX] ...[/QUOTE]
感谢帮忙分析!
我先不脱壳,因为要获取原程序中部分数据,本身就要往原程序中注入一个DLL,暂时先考虑内存修改。
目前部分功能验证已OK。
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
发现我好久没上论坛了。
MistHill 依然犀利。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
博易大师有不加壳的版本啊
|
能力值:
( LV9,RANK:170 )
|
-
-
14 楼
是的,以前有UPX加壳的,用UPX本身就可以脱的。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
rock
Themida 的壳,脱了也没意义,因为有虚拟机
有虚拟机的脱壳都没用么
|
能力值:
( LV4,RANK:40 )
|
-
-
16 楼
petersonhz
有虚拟机的脱壳都没用么[em_17]
有参数的话跟参数进虚拟机也没啥问题...
|
|
|