之前搞过一轮,又搞了一次。把试过的几种方法总结一下。
一种适合基本普通的安卓apk包,基本流程就是
1 右击apk包,使用mac解包工具解压,
2 把classes.dex转成jar包,cd ~/Downloads/dex2jar-2.0/
./d2j-dex2jar.sh -f ~/Downloads/game.v316602/classes.dex
3 使用工具查看jar包源码,反编译java代码。
cd ~/tmp/jadx/build/jadx/bin
-:> ./jadx-gui
然后想提取游戏资源,有的素材没加密可以直接从解压包里找到。其他针对不同情况从网上找了几种工具。
一种万能的工具:
一种英伟达的:
下载地址在这里 https://developer.nvidia.com/gameworksdownload
下载Tegra Graphics Debugger 支持Mac Linux Windows
Tegra 机型查询 http://www.nvidia.cn/object/tegra-phones-cn.html
一种高通的:
下载地址: https://developer.qualcomm.com/software/adreno-gpu-sdk/tools
其他根据用的游戏框架不同,比如unity的框架,有专用的工具破解游戏资源。
Read more...
Archive for 反编译
完美破解mac版迅雷
用mac迅雷下载视频,提示“抱歉,该资源被举报,会员服务无法使用”。卧槽 老子是会员都有这提示,不能忍,网上搜索mac迅雷破解方法,一大堆,主要用Hopper。
这玩意下载了发现需要破解才能导出exe文件,不能忍。看雪找到破解版。
然后根据教程,完美破解了。这里复制一下教程保留着。
新添加了一个 etm_is_high_speed_channel_usable ,修改方法一样,开启迅雷高速通道的。
Mac迅雷可执行文件路径/Applications/Thunder.app/Contents/MacOS/Thunder
用Hopper载入可执行文件
在Label搜索栏中输入“ is”(注意,是“空格is”),在搜索结果中,找到如图所示的4个方法:
1. -[LocalTask isValidLixianTask]
2. -[UserController isVip]
3. -[UserController isPlatinum]
4. -[UserController isDiamond]
用Hopper静态patch这4个方法
把鼠标焦点放在-[LocalTask isValidLixianTask]的第一行汇编代码上,然后选择Hopper菜单栏的Modify -> Assemble Instruction,并在弹出的文本框里输入mov eax, 0x1
然后点击“Assemble and Go Next”,再在文本框里输入ret。
为什么要这么patch呢?简单解释一下:在x86汇编里,函数的返回值存放在eax寄存器里。1对应BOOL类型的YES,因此我们的patch让-[LocalTask isValidLixianTask]永远返回YES,告诉迅雷这是一个有效的离线任务 wink
同理,用完全相同的输入来patch掉另外的3个方法,即把它们的前2条汇编指令都改成mov eax, 0x1和ret。
用Hopper生成一个patch过的新可执行文件
在Hopper的菜单里选择File -> Produce New Executable...,然后在弹框中选择YES,即可生成一个新的Thunder文件。用这个新的Thunder替换掉原来的/Applications/Thunder.app/Contents/MacOS/Thunder
Read more...
android应用反编译classes.dex文件dex2jar
前边提到过jd jui这个工具。
又找到一个反编译classes.dex文件的dex2jar
直接解压文件,然后使用./dex2jar.sh classes.dex来反编译就行了,会生成一个classes_dex2jar.jar文件。可以用jd jui查看代码了。
具体原理也没研究不过看名字。。
Read more...
一个java class文件反编译工具jd jui
一个很方便的java class文件反编译工具,支持mac linux windows,使用也很方便,可以直接打开一个jar文件,然后就可以浏览代码了0 0.
下载地址:http://jd.benow.ca/
Read more...
资源提取器
资源破解,并不是很复杂,方法大致有3种
1,硬性破解
通过观察目标文件和反汇编代码,分析出资源压缩或者加密的格式,写程序读取改文件,并转换成一种自己可以识别的格式就OK了
这是自己动手解资源时最容易想到的做法
具体来说,也就是通过一些特定函数,譬如 fopen、createFile这样的文件相关函数,确定游戏的解资源函数,然后就拼命的分析汇编代码就OK了
我前期大部分资源都是这样破解的,最好先用UEDIT分析一下实际的文件,有些格式太简单了,通过文件大小,用看的就可以了:)
这种方法,我解过的最复杂的就是神奇传说系列,当时就感觉和GIF比较像,但又不太一样,因为对压缩算法没研究,所以就没深究了,不过后来从网上看到文章说,那是一个很通用的压缩算法,一些解压工具就可以可以解开的,◎#¥%……真是不爽(不过还好,我只花了几个小时就解开那个游戏而已:))
2,Dump
等图片载入后,直接从内存中导出
这种做法也很容易想到的,主要难点在于内存中资源的格式问题,可能对3D游戏来说,这种解法比较容易一些,毕竟纹理渲染这些,是显卡完成的,不是软件实现的
我了解到的有些人解魔兽的资源就是这样解开的,hook OpenGL的一些函数:)
我这样解过一些游戏的文本(汉化用的文字),赛车游戏的,为了获取所有游戏文本,特地将那款游戏通关的说:)
3,直接调用游戏的解码函数解码
和第2种做法类似,但是主动调用函数,基本上可以一次将所有资源全部解开,不需要游戏通关:)
当然,不是让你调用游戏的解包模块,毕竟很多游戏都不是dll形式的
只能侵入到游戏进程内部,找一个合适的时机(一般是载入其他文件的时候,中断跳转一下,先把我们的事做完:)),调用内部函数,解开所有的资源
我解过一款游戏就是用这种方法,说起来,那款游戏的资源压缩率和rar差不多(我试着压缩过解开的文件,大小和rar压缩后的大小比较接近,不太清楚是什么算法,但要是用汇编来分析,想想就会觉得头痛的:))
这个做法其实和第一种方法也有些类似,也是先找到解图函数(这个最好用IDA静态分析,因为它在函数跳转这些,比SoftIce要清晰很多,强烈建议大家配合使用:)),然后弄清楚参数,和输出格式,直接调用就可以了:)
这儿需要注意一下的事,函数外部相关变量的问题
我分析的那个游戏,是c++完成的(从汇编就可以很明显的感觉到,N多跳转),解包函数应该是独立封装成一个类,类内部的私有变量,其中有些,再解包函数中使用过的。这个分析起来应该会复杂一点的。
当然,要多动手试试,很多时候,不需要很清楚的知道它是做什么的,猜一下,能达到目的就OK了:)
Read more...