设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
查看: 7255|回复: 7

[编程算法] 东方幕华祭手记

[复制链接]
发表于 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

 
  1. 0012FC18   77BFF45D  /CALL 到 CreateFileA 来自 MSVCRT.77BFF457
  2. 0012FC1C   00154760  |FileName = "C:\Documents and Settings\Owner\桌面\新建文件夹\lua5.dll"
  3. 0012FC20   80000000  |Access = GENERIC_READ
  4. 0012FC24   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  5. 0012FC28   0012FC44  |pSecurity = 0012FC44
  6. 0012FC2C   00000003  |Mode = OPEN_EXISTING
  7. 0012FC30   00000080  |Attributes = NORMAL
  8. 0012FC34   00000000  \hTemplateFile = NULL
  9. 0012FC38   003B20BD  ScriptMa.003B20BD
复制代码


以上是CreateFile的栈情况。ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE该文件可以被共享读写访问。

取消CreateFile断点给ReadFile下断。

  1. 0012FC88   77BFF941  /CALL 到 ReadFile 来自 MSVCRT.77BFF93B
  2. 0012FC8C   0000000C  |hFile = 0000000C
  3. 0012FC90   003CAB20  |Buffer = 003CAB20
  4. 0012FC94   00001000  |BytesToRead = 1000 (4096.)
  5. 0012FC98   0012FCAC  |pBytesRead = 0012FCAC
  6. 0012FC9C   00000000  \pOverlapped = NULL
  7. 0012FCA0   77C32440  OFFSET MSVCRT.__pioinfo
复制代码


以上是栈情况意思是从lua5.dll复制1000h到003CAB20偏移处,跟踪003CAB20处,取消断点,然后Ctrl+F9返回。

lua5.dll的数据被填充,取消所有断点,给CreateFileA、ReadFile下断直到FileName=elements.dat。 看栈  

  1. 0012F54C   10104D0C  /CALL 到 ReadFile 来自 D2D.10104D06
  2. 0012F550   00000358  |hFile = 00000358 (window)
  3. 0012F554   00CA5CE8  |Buffer = 00CA5CE8
  4. 0012F558   00001000  |BytesToRead = 1000 (4096.)
  5. 0012F55C   0012F5C8  |pBytesRead = 0012F5C8
  6. 0012F560   00000000  \pOverlapped = NULL

复制代码


可以看到和lua5.dll的读取大小一致,后面就是解密算法了。

到此,说说窗口和其他的东西。

同样给CreateWindowExA即可,题外话创建了很多子窗。

大部分流程都走D2D.DLL

socket.dll则创建了弹出式对话框和midi子窗

  1. 0012F8FC   054397F6  /CALL 到 CreateWindowExA 来自 socket.054397F0
  2. 0012F900   00000000  |ExtStyle = 0
  3. 0012F904   05463600  |Class = "WTWindow"
  4. 0012F908   05473A1C  |WindowName = ""
  5. 0012F90C   22400000  |Style = WS_OVERLAPPED|WS_CLIPCHILDREN|WS_MINIMIZE|WS_DLGFRAME
  6. 0012F910   00000032  |X = 32 (50.)
  7. 0012F914   00000032  |Y = 32 (50.)
  8. 0012F918   00000038  |Width = 38 (56.)
  9. 0012F91C   0000001D  |Height = 1D (29.)
  10. 0012F920   00B90E2C  |hParent = 00B90E2C (class='Afx:53c0000:0:10011:1900015:0')
  11. 0012F924   00000000  |hMenu = NULL
  12. 0012F928   053C0000  |hInst = 053C0000
  13. 0012F92C   00000000  \lParam = NULL

复制代码



到此基本上就结束了如果想知道跟多过程可以跟踪消息来看D2D处理的流程比如给HGE__WNDCLASS类下按键消息。

百度了一下似乎是D2D的引擎。
发表于 2010-12-20 08:23:27 | 显示全部楼层
头晕,假期想拜师跟12君学OD~~~算了暂时只是想想而已~~
回复

使用道具 举报

 楼主| 发表于 2010-12-20 11:07:41 | 显示全部楼层
补充 dat 为 ZIP格式文档。  有密码 = =
回复

使用道具 举报

发表于 2010-12-22 12:39:21 | 显示全部楼层
早就发现了,12菌为什么不跟一下然后吧密码爆出来
回复

使用道具 举报

发表于 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 | 显示全部楼层
部分脚本?(雾)  引擎内部好复杂 = =

dump.rar (28.59 KB, 下载次数: 358)
回复

使用道具 举报

发表于 2011-1-4 21:12:58 | 显示全部楼层
这脚本居然用中文作变量名,太牛了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 10:28

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表