| 本帖最后由 十二 于 2010-12-19 20:07 编辑 
 似乎程序是DEMO版本的,于是就跟了一下。程序没有明显的ANTI、也没加壳。
 
 用LordPE打开Game.exe查看输入表并没有把全部函数写进输入表。也就是说程序通过LoadLibrary和GetProcAddress获取了函数。
 
 Game通过ScriptManager.dll的LoadLibraryA相继载入了对应的模块。
 
 但是lua5.dll并没有载入它被CreateFile了也就是说它是个数据文件而非是个模块。
 
 OD - F3 打开Game CreateFileA
 
  
 复制代码0012FC18   77BFF45D  /CALL 到 CreateFileA 来自 MSVCRT.77BFF457
0012FC1C   00154760  |FileName = "C:\Documents and Settings\Owner\桌面\新建文件夹\lua5.dll"
0012FC20   80000000  |Access = GENERIC_READ
0012FC24   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012FC28   0012FC44  |pSecurity = 0012FC44
0012FC2C   00000003  |Mode = OPEN_EXISTING
0012FC30   00000080  |Attributes = NORMAL
0012FC34   00000000  \hTemplateFile = NULL
0012FC38   003B20BD  ScriptMa.003B20BD
 以上是CreateFile的栈情况。ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE该文件可以被共享读写访问。
 
 取消CreateFile断点给ReadFile下断。
 
 
 复制代码0012FC88   77BFF941  /CALL 到 ReadFile 来自 MSVCRT.77BFF93B
0012FC8C   0000000C  |hFile = 0000000C
0012FC90   003CAB20  |Buffer = 003CAB20
0012FC94   00001000  |BytesToRead = 1000 (4096.)
0012FC98   0012FCAC  |pBytesRead = 0012FCAC
0012FC9C   00000000  \pOverlapped = NULL
0012FCA0   77C32440  OFFSET MSVCRT.__pioinfo
 以上是栈情况意思是从lua5.dll复制1000h到003CAB20偏移处,跟踪003CAB20处,取消断点,然后Ctrl+F9返回。
 
 lua5.dll的数据被填充,取消所有断点,给CreateFileA、ReadFile下断直到FileName=elements.dat。 看栈  
 
 
 复制代码0012F54C   10104D0C  /CALL 到 ReadFile 来自 D2D.10104D06
0012F550   00000358  |hFile = 00000358 (window)
0012F554   00CA5CE8  |Buffer = 00CA5CE8
0012F558   00001000  |BytesToRead = 1000 (4096.)
0012F55C   0012F5C8  |pBytesRead = 0012F5C8
0012F560   00000000  \pOverlapped = NULL
 可以看到和lua5.dll的读取大小一致,后面就是解密算法了。
 
 到此,说说窗口和其他的东西。
 
 同样给CreateWindowExA即可,题外话创建了很多子窗。
 
 大部分流程都走D2D.DLL
 
 socket.dll则创建了弹出式对话框和midi子窗
 
 
 复制代码0012F8FC   054397F6  /CALL 到 CreateWindowExA 来自 socket.054397F0
0012F900   00000000  |ExtStyle = 0
0012F904   05463600  |Class = "WTWindow"
0012F908   05473A1C  |WindowName = ""
0012F90C   22400000  |Style = WS_OVERLAPPED|WS_CLIPCHILDREN|WS_MINIMIZE|WS_DLGFRAME
0012F910   00000032  |X = 32 (50.)
0012F914   00000032  |Y = 32 (50.)
0012F918   00000038  |Width = 38 (56.)
0012F91C   0000001D  |Height = 1D (29.)
0012F920   00B90E2C  |hParent = 00B90E2C (class='Afx:53c0000:0:10011:1900015:0')
0012F924   00000000  |hMenu = NULL
0012F928   053C0000  |hInst = 053C0000
0012F92C   00000000  \lParam = NULL
 
 到此基本上就结束了如果想知道跟多过程可以跟踪消息来看D2D处理的流程比如给HGE__WNDCLASS类下按键消息。
 
 百度了一下似乎是D2D的引擎。
 |