当然,这只是一个笔记:
最近将一个反复刷机闲置的山寨机用作游戏机,安装一个叫Townsmen的游戏,蹦出一个占了1/3屏幕的广告
跟阿里YunOS系统无法Root一样,我原以为只有中国妓造才那么无耻,没想到……
屏幕是我的,商家无权抢占消费者的任何合法资产,所以,切你没商量
1.反编译townsmen7_36.apk文件
命令为(目录因具体情况而异):
java -Xmx512m -jar "platform-tools\apktool_2.0.3.jar" d -o "project/townsmen7_36" "input/townsmen7_36.apk"
2.用IDA打开.so文件
目录为project\townsmen7_36\lib下对应指令集文件夹,选择ARM指令集处理器(以armeabi为例)
点击搜索菜单,搜索文本
输入"hasADs",勾选"查找全部出现处",点"ok"
搜索结果出现很多,唯一的iniNewProfile应该就是创建新存档时的接口(如果有Root权限也可以直接修改存档)
双击定位
再双击iniNewProfile定位到该函数的指令处
注意指令0x3EA114处,就是这里默认给新建档案写入hasAds=1(true)
切换到Hex-View,显示01 32,如图
右键"Edit"直接按数字键改为0,再右键"Apply Changes"保存,如图
修改处变色如图
切换回IDA View发现指令已经变成
.text:003EA114 ADDS R2, #0
然后打开WinHex或者UE(UltraEdit),定位到003EA114,用相同的方法修改二进制数据
同样方法修改armeabi-v7a和x86的.so动态库,x86就更简单了,大家都熟悉的,下面是我的笔记
[x86]
//.text:00628E33 ; game::UserProfile::hasAds(void)+362j ...
//.text:00628E33 movzx eax, byte ptr [esp+13Ch+var_11C] ; 返回值
//>>0F B6 44 24 20
//1000100A 0FB64424 20 movzx eax, byte ptr [esp+20] ; /ProcNameOrOrdinal
//1000100A B8 00000000 mov eax, 0
.text:0062E5E0 ; game::UserProfile::initNewProfile(void)
.text:0062E5E0 public _ZN4game11UserProfile14initNewProfileEv
.text:0062E5E0 _ZN4game11UserProfile14initNewProfileEv proc near
.text:0062E5E0 ; CODE XREF: game::UserProfile::getInstance(void)
.text:0062E622 lea eax, (unk_8981F2 - 0A39A08h)[ebx] ; db 1
.rodata:008981F2 unk_8981F2 db 0 ; DATA XREF: game::UserProfile::initNewProfile(void)+42o
>> 00
[ARM]
//.text:003E94BE MOVS R0, R5 ; 返回值
//.text:003E94C0 POP {R1-R5,PC}
//.text:003E94C0 ; End of function game::UserProfile::hasAds(void)
//>> 28 1C
//.text:003E94BE MOVS R0, #0
//>> 00 20
.text:003EA0F4 ; game::UserProfile::initNewProfile(void)
.text:003EA0F4 EXPORT _ZN4game11UserProfile14initNewProfileEv
.text:003EA0F4 _ZN4game11UserProfile14initNewProfileEv ; CODE XREF: game::UserProfile::getInstance(void)
.text:003EA114 ADDS R2, #1
>> 01 32
.text:003EA114 ADDS R2, #0
>> 00 32
[ARMv7a]
.text:003DFE04 ; game::UserProfile::initNewProfile(void)
.text:003DFE04 EXPORT _ZN4game11UserProfile14initNewProfileEv
.text:003DFE04 _ZN4game11UserProfile14initNewProfileEv ; CODE XREF: game::UserProfile::getInstance(void)
.text:003DFE26 ADDS R2, #1
>> 01 32
.text:003DFE26 ADDS R2, #0
>> 00 32
在project\townsmen7_36\assets\data下有很多XML文件,都是任务设置,需要的资源,奖励的资源等等
如tutorial.xml是新手教程的人物配置,资源代码如下(也是笔记,未完全测试,另外不建议修改游戏平衡)
[/assets/data]
//
// prestige=声望, coins=金币
// wood=木材 fish=鱼 [lupulus=啤酒花] gold=金矿 pig=猪 fabric=布料
// planks=木板 bread=面包 corn=谷物 iron=铁块 [fur=皮毛] cloths=衣物
// stone=石料 meat=肉 flour=面粉 nuggets=金块 [leather=皮革] jewelry=首饰
// tools=工具 herbs=草药 coal=煤 weapons=武器 sausage=香肠 juice=果汁
// [water=水] grapes=葡萄 ore=铁矿 armor=装甲 wool=羊毛 brew=酿酒
//
// 其它: bandits是强盗, FROZENPLAIN为冰原, 是经验值, tribute是贡品, deco=装饰品
4.回编译apk文件
命令如下
java -Xmx512m -jar "platform-tools\apktool_2.0.3.jar" b -o "output/townsmen7_36.apk" "project/townsmen7_36"
5.签名apk文件
命令为
java -Xmx512m -jar "tools\signapk.jar" -w "tools\testkey.x509.pem" "tools\testkey.pk8" "output/townsmen7_36.apk" "release/townsmen7_36.apk"
放到你的手枪机上,任意的奸淫吧
阿弥陀佛,罪过,罪过!