记一次FGO逆向过过程 chapter1

明学的白板 2018-02-09

首先百度搜索fgo,发现是bilibili代理的一款游戏,直接下载apk包,版本是1.17.1

安装jdk 1.8

改变格式为zip,查看到lib目录内有libmono,旧版unity3d无误
直接解压Assembly-CSharp.dll出来,用Reflector打开不了,估计是加密过了

记一次FGO逆向过过程 chapter1


解压libmono出来,用ida打开,发现是加了壳

记一次FGO逆向过过程 chapter1
为了验证是不是所有so都加壳了,并由某个so来解壳,打开看上去名字很叼的libfunnykey
打开来看没加壳,里面有一个有深意的函数,先记下来:

记一次FGO逆向过过程 chapter1

int GetFunnyKey()
{
return (int)"loe7vGe2wMU/h8Ik/XdS86QHavZ75uiqI6skBH3mo0KeOim6GbMbFQ==";
}

对于libmono解密dll,这篇文章说得比较详细,介绍了好几种思路
https://www.52pojie.cn/thread-401702-1-1.html
里面提到几种libmono脱壳方法,打算选用动态调试来解析

打开libunity,在libunity中找到了mono_image_open_from_data_with_name方法的导入

记一次FGO逆向过过程 chapter1
猜想是libmono自己脱壳

调试环境选的是mumu模拟器,模拟器附带有adb工具,地址是
C:\Program Files (x86)\Nemu\vmonitor\bin\adb_server.exe


把C:\Program Files (x86)\Nemu\vmonitor\bin添加到Path环境变量中,并复制adb_server.exe到adb.exe
adb connect 127.0.0.1:7555

Ida调试服务端
C:\Program Files (x86)\IDA 6.6\dbgsrv\linux_server
adb push "C:\Program Files (x86)\IDA 6.6\dbgsrv\linux_server" /data/data/linux_server
adb shell
chmod 755 /data/data/linux_server
/data/data/linux_server
结果运行不了
换了android_server和linux_serverx64都不行

记一次FGO逆向过过程 chapter1

猜想是ida版本的问题,换了IDA Pro v7.0
打开目录IDA_Pro_v7.0_Portable\dbgsrv
发现里面有一个叫android_x86_server,这个是6.6里面没有的
adb push android_x86_server /data/data/
adb shell
chmod 755 /data/data/android_x86_server
/data/data/android_x86_server
成功运行起来了

记一次FGO逆向过过程 chapter1

新打开一个cmd窗口
adb forward tcp:23946 tcp:23946
把端口暴露出来

直接打开ida7.0,打开libmono,神奇的发现居然解析出来了,不过是加过壳的,看不出来内容

记一次FGO逆向过过程 chapter1
选择remote linux调试器,设置ip地址为127.0.0.1
选择attach,发现找不到程序,原来游戏我还打开。。。
打开后cancel重新attach,选择 com.bilibili.fatego 这个进程
提示你找到libmono,与本地的相同不相同,我直接点same
然后一直抛异常,直接设置不处理,然后就卡死了,关掉ida,重新打开,不打开文件直接附加
直接就退出来了,应该是有反调试处理,这。。。这就涉及到我的知识盲区了,这个系列就到此为止吧!

怎么能就这样放弃!
https://github.com/iSECPartners/Android-OpenDebug
下载Android-OpenDebug,让模拟器直接打开所有程序的debug开关,无需改apk即可调试
安装好后重启模拟器

然后看看手头要准备的工具:android sdk

以前下载好的一个旧版本r24.3.4,解压出来打开tools\ddms.bat

发现能用,恩。。还行,打开游戏,然后在ddms窗口中选中进程

ddms没有任何数据,嗯。。重新运行下adb connect 127.0.0.1:7555

记一次FGO逆向过过程 chapter1

运行一条指令以debug模式启动游戏:

adb shell am start -D com.bilibili.fatego/jp.delightworks.Fgo.player.AndroidPlugin

后面的包名是用apktool解包出来看到的

运行一条调试器附加命令

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

提示jdb找不到,垃圾java!

设置PathC:\Program Files\Java\jdk1.8.0_131\bin

重新打开cmd窗口,运行,成功附加进去了,游戏运行成功,目测没有java层反调试

总算有点希望了,先休息一下

相关推荐