东方幕华祭手记
本帖最后由 十二 于 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的引擎。 头晕,假期想拜师跟12君学OD~~~算了暂时只是想想而已~~ 补充 dat 为 ZIP格式文档。有密码 = = 早就发现了,12菌为什么不跟一下然后吧密码爆出来 回复 4# pa001024
另外关于这个游戏的引擎= =在文件的属性里面不是写得相当清楚了么…………EDGAME MAKER制作
= =另外调用易语言的DLL抓包 本帖最后由 十二 于 2010-12-23 17:16 编辑
我并没注意 只是拿到Demo后就习惯的开OD跟了一下
回复 4# pa001024
无能一步一步跟不晓得PAKZIP怎么解密 = =
部分脚本?(雾) 引擎内部好复杂 = =
这脚本居然用中文作变量名,太牛了
页:
[1]