Unity3D之脚本反编译点滴记录

Part1:

参考文章:

http://bbs.pediy.com/showthread.php?t=209353

针对加密方式:对dll进行破坏二进制的加密方式

平台和环境:win7,jdk,android-ndk-r10e,Cygwin,adb,安卓真机(需要root权限)或者模拟器(本篇中使用夜深模拟器)

 

Part2:

配置JDK

新建JAVA_HOME,示例路径C:\Program Files\Java\jdk1.7.0_80

Path中追加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

 

安装Cygwin

示例安装目录:C:\cygwinpath

 

配置adb

示例安装路径C:\adb

Path中追加C:\adb;

 

配置NDK

示例解压目录:F:\android-ndk-r10e

编辑文件:C:\cygwinpath\home\Administrator\.bash_profile

加入,并保存

NDK=/cygdrive/f/android-ndk-r10e

export NDK

 

验证配置对不对,打开cmd

jdk:javac回车

adb:adb回车

打开Cygwin命令终端,输入cd $NDK回车

 

Part3:

试着编译ndk demo,打开Cygwin命令终端,

输入cd $NDK回车

输入cd samples/hello-jni

输入$NDK/ndk-build回车

刷屏ing.....

.....如果不刷屏,自己找原因吧

 

 

写自己的so程序以及配置工程

在同目录下复制一份hello-jni,并改名为hello-a

进入hello-a中,只保留jni目录,其他的全部删除掉

继续进入jni目录中,把hello-jni.c改名为hello-a.c,并写下自己的c程序,如参考文章中的代码

编辑Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= helloa
LOCAL_SRC_FILES := hello-a.c
include $(BUILD_EXECUTABLE)

 

编辑Application.mk

APP_ABI := armeabi-v7a

 

就绪,用Cygwin进入到hello-a目录中,cd $NDK/samples/hello-a回车

继续输入$NDK/ndk-build回车

刷屏ing....

在目录hello-a\libs\armeabi-v7a中找到编译好的helloa文件

 

Part4:

在unity 安卓版的游戏中找到Assembly-CSharp.dll,libmono.so两个文件,连同上边的helloa文件,一起拷贝到c盘根目录下

打开夜深模拟器,用adb连接

打开命令提示符,输入adb connect 127.0.0.1:62001回车

 

复制文件到安卓中,一次在命令提示符中执行

adb push c://Assembly-CSharp.dll /data/local/tmp

adb push c://libmono.so /data/local/tmp

adb push c://helloa /data/local/tmp

 

用adb进入到安卓/data/local/tmp中

adb shell回车

su回车

cd /data/local/tmp回车

提升helloa权限,chmod 777 helloa

执行helloa,./helloa回车

 

 

把最终生成的解密dump.dll导出

先退出之前的执行,exit回车

然后执行adb pull /data/local/tmp/dump.dll c://

 

引发深思

此方法能解一般处理的游戏,按照参考文章中的代码和作者说的,解密的局限性也比较大,

事先得先分析(用ida pro)游戏有没有对libmono.so进行封装,怎么封装的,

然后改写我们的解密代码(特别是对应的函数原型,和传入参数)

有人提到说可以利用内存抓取进行破解,成功率极高,方法未知。。。望知道的兄台指点一下,原文https://www.zhihu.com/question/25414422

 

posted @ 2016-05-31 15:12  洗剪吹与灰化肥  阅读(1158)  评论(0编辑  收藏  举报