首页
论坛
专栏
课程

[.NET平台] [已解决]怎么分析打包后的.Net程序

2008-12-28 20:19 3838

[.NET平台] [已解决]怎么分析打包后的.Net程序

2008-12-28 20:19
3838
今天下午答辩了我们前段时间做的图书管理系统的项目。刚好这两个星期从《微软.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程序的部分。

还请大家帮帮忙。有思路的给个思路,有方法的给个方法。在此先谢谢大家了。

[公告]看雪20周年会 | 感恩有你,一路同行

最新回复 (3)
dreamzgj 2 2008-12-28 22:16
2
0
从16:00折腾到现在终于知道怎么办了

要谢谢看雪回答一个朋友的问题提示到了UniExtract这个工具,他竟然也可以提取出

msi中的程序,然后就可以分析这些真正的.net程序了。嘿嘿。看来是我的思路上存在问题

下次在见那个老师就不怕他那不屑的眼神了。当然学到东西才是真正重要的。
stalker 8 2008-12-28 22:23
3
0
下次再有老师问这种问题
你要假装自己已经试过了,眼睛看着他,很有自信地说“当然可以”
dreamzgj 2 2008-12-28 22:30
4
0


我一向比较诚实哈

不过下次我肯定像你说的那样说

不行了我就说你说的
游客
登录 | 注册 方可回帖
返回