十二 发表于 2010-12-19 19:07:24

东方幕华祭手记

本帖最后由 十二 于 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的引擎。

神符影之歌 发表于 2010-12-20 08:23:27

头晕,假期想拜师跟12君学OD~~~算了暂时只是想想而已~~

十二 发表于 2010-12-20 11:07:41

补充 dat 为 ZIP格式文档。有密码 = =

pa001024 发表于 2010-12-22 12:39:21

早就发现了,12菌为什么不跟一下然后吧密码爆出来

pa001024 发表于 2010-12-22 12:41:16

回复 4# pa001024


    另外关于这个游戏的引擎= =在文件的属性里面不是写得相当清楚了么…………EDGAME MAKER制作
= =另外调用易语言的DLL抓包

十二 发表于 2010-12-23 13:30:30

本帖最后由 十二 于 2010-12-23 17:16 编辑

我并没注意  只是拿到Demo后就习惯的开OD跟了一下

回复 4# pa001024


        无能一步一步跟不晓得PAKZIP怎么解密 = = 

十二 发表于 2010-12-24 15:01:13

部分脚本?(雾)  引擎内部好复杂 = =

阿燐燐 发表于 2011-1-4 21:12:58

这脚本居然用中文作变量名,太牛了
页: [1]
查看完整版本: 东方幕华祭手记