今天下午答辩了我们前段时间做的图书管理系统的项目。刚好这两个星期从《微软.Net加密与解密》书中学到了不少关于.Net方面的知识。我在学校也是学.Net C#的。于是在答辩之前,我把我的程序用{smartassembly}加了混淆,且在假设我没有源码的情况下,把之前没有保护的程序给破了。当然这也作为了我答辩内容的一部分。毕竟我们学校的基本上没什么人懂这方面的东东。但其中一个点评的老师硬是追着我问:“如果我们程序打包你还看的到代码吗?”。然后我就说没试过,也刚接触。那老师就特别不屑的摇摇头,好像感觉我搞这东西很白痴似的。于是就特郁闷的回来后分析打包后的.Net的程序,也就有了现在向各位大大请教。
首先我们我以前写过的一个记事本给打了包,然后就开始了分析打包后的exe文件。PEID查了下,VC++7.0。CFF查看,当然已经看不到无数据信息了。
OD载入,断在VC++的启动代码出处。
F8一阵后,在call进两年子程序后,这时来到这里,出现的安装的界面。
如下:
0040652E |. 51 push ecx ; /pProcessInfo
0040652F |. 8D8D 40FEFFFF lea ecx,dword ptr ss:[ebp-1C0] ; |
00406535 |. 51 push ecx ; |pStartupInfo
00406536 |. 53 push ebx ; |CurrentDir
00406537 |. 53 push ebx ; |pEnvironment
00406538 |.68 00000004 push 400000; |CreationFlags = CREATE_DEFAULT_ERROR_MODE
0040653D |. 53 push ebx ; |InheritHandles
0040653E |. 53 push ebx ; |pThreadSecurity
0040653F |. 53 push ebx ; |pProcessSecurity
00406540 |. 50 push eax ; |CommandLine
00406541 |. 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] ; |
00406547 |. 50 push eax ; |ModuleFileName
00406548 |. FF15 64104000 call dword ptr ds:[<&KERNEL32.CreateProce>; \CreateProcessA
0040654E |. 85C0 test eax,eax
00406550 |. 75 0A jnz short Setup.0040655C
00406552 |. FF15 10114000 call dword ptr ds:[<&KERNEL32.GetLastErro>; [GetLastError
00406558 |> 8BF0 mov esi,eax
0040655A |. EB 25 jmp short Setup.00406581
0040655C |> FFB5 8CFEFFFF push dword ptr ss:[ebp-174]
00406562 |. E8 25E7FFFF call Setup.00404C8C ; 安装程序
00406567 |. 3BC3 cmp eax,ebx
00406569 |. 59 pop ecx
0040656A |.^ 75 EC jnz short Setup.00406558
0040656C |. 8D85 88FEFFFF lea eax,dword ptr ss:[ebp-178]
00406572 |. 50 push eax ; /pExitCode
00406573 |. FFB5 8CFEFFFF push dword ptr ss:[ebp-174] ; |hProcess
00406579 |. FF15 60104000 call dword ptr ds:[<&KERNEL32.GetExitCode>; \GetExitCodeProcess
0040657F |. 33F6 xor esi,esi
00406581 |> FFB5 8CFEFFFF push dword ptr ss:[ebp-174] ; /hObject
00406587 |. FF15 44104000 call dword ptr ds:[<&KERNEL32.CloseHandle>; \CloseHandle
如上:00406562 |. E8 25E7FFFF call Setup.00404C8C
Call 进去后如下 :
00404C8C /$ 55 push ebp ; 安装程序步骤的具体过程
00404C8D |. 8BEC mov ebp,esp
00404C8F |. 83EC 1C sub esp,1C
00404C92 |. 56 push esi
00404C93 |. 57 push edi
00404C94 |. 6A 07 push 7
00404C96 |. 33F6 xor esi,esi
00404C98 |. 59 pop ecx
00404C99 |. 33C0 xor eax,eax
00404C9B |. 8D7D E4 lea edi,dword ptr ss:[ebp-1C]
00404C9E |. F3:AB rep stos dword ptr es:[edi]
00404CA0 |> 68 FF000000 /push 0FF ; /WakeMask = QS_ALLINPUT
00404CA5 |. 6A FF |push -1 ; |Timeout = INFINITE
00404CA7 |. 56 |push esi ; |WaitAll
00404CA8 |. 8D45 08 |lea eax,dword ptr ss:[ebp+8] ; |
00404CAB |. 50 |push eax ; |phObjects
00404CAC |. 6A 01 |push 1 ; |nObjects = 1
00404CAE |. FF15 10124000 |call dword ptr ds:[<&USER32.MsgWaitForMu>; \MsgWaitForMultipleObjects
00404CB4 |. 2BC6 |sub eax,esi
00404CB6 |. 74 34 |je short Setup.00404CEC ;如果取消安装这里会跳向结束,那么安装程序也就结束了。
00404CB8 |. 48 |dec eax
00404CB9 |. 75 29 |jnz short Setup.00404CE4
00404CBB |. 6A 01 |push 1 ; /RemoveMsg = PM_REMOVE
00404CBD |. 56 |push esi ; |MsgFilterMax
00404CBE |. 56 |push esi ; |MsgFilterMin
00404CBF |. 56 |push esi ; |hWnd
00404CC0 |. 8D45 E4 |lea eax,dword ptr ss:[ebp-1C] ; |
00404CC3 |. 50 |push eax ; |pMsg
00404CC4 |. FF15 14124000 |call dword ptr ds:[<&USER32.PeekMessageA>; \PeekMessageA
00404CCA |. 85C0 |test eax,eax
00404CCC |.^ 74 D2 |je short Setup.00404CA0
00404CCE |. 8D45 E4 |lea eax,dword ptr ss:[ebp-1C]
00404CD1 |. 50 |push eax ; /pMsg
00404CD2 |. FF15 18124000 |call dword ptr ds:[<&USER32.TranslateMes>; \TranslateMessage
00404CD8 |. 8D45 E4 |lea eax,dword ptr ss:[ebp-1C]
00404CDB |. 50 |push eax ; /pMsg
00404CDC |. FF15 1C124000 |call dword ptr ds:[<&USER32.DispatchMess>; \DispatchMessageA
00404CE2 |.^ EB BC \jmp short Setup.00404CA0
00404CE4 |> FF15 10114000 call dword ptr ds:[<&KERNEL32.GetLastErro>; [GetLastError
00404CEA |. 8BF0 mov esi,eax
00404CEC |> 5F pop edi
00404CED |. 8BC6 mov eax,esi
00404CEF |. 5E pop esi
00404CF0 |. C9 leave
00404CF1 \. C3 retn
看看这段代码,安装若取消,刚会跳出这段消息循环,或者是运行中出现错误,跳出。
其中在分析中,发现安装时调用了C:\winodws\system32\msiexec.exe
在我的这个安装目录下还有一个setup.msi,最后发现setup.exe运行时如上代码,在其中调用了msiexec.exe来加载setup.msi。
于是我就直接运行setup.msi,然后用OD附加(附加的时候发现只有msiexec与些安装程序有关,于是就附加了msiexec)。
F8跟到msiexec出现其界面,点击确定了就结束了。
跟了老半天,却一点也没有找到安装程序的影子,包括在安装时我点“现在注册”,也弹出了我填加注册的的那个可执行程序。但是始终靠近不了真正.Net程序的部分。
还请大家帮帮忙。有思路的给个思路,有方法的给个方法。在此先谢谢大家了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)