解析framework-res.apk中resources.arsc, 更改值实现修改屏幕最低亮度

x屏幕最低亮度的值在apk项目的res/values/integers.xml中定义:
有一行:

<integer name="config_screenBrightnessSettingMinimum">10</integer>

里面设置的10,就是最低亮度,可以改成1或者2. 但是有人说调太低会出事。。。不管,xposed的GravityBox模块中也有调整最低亮度的设置, 设成最低没出问题。

没成功的方法:

尝试了用apktool反编译apk去修改

反编译能出来东西,但是报错:
W: Config flags size > 52. Size = 56. Exceeding bytes: 0x16662214.
W: Invalid config flags detected. Dropping resources: string-mcc204-mnc4-ERR0

b在反编译出来的文件中找到res/values/integers.xml, 修改好值之后回编译回去。 替换到手机里面,重启开机,黑屏,logcat看到报错说找不到某个资源。 不行。

成功了的方法

直接修改resources.arsc中的二进制值

找到文章尼古拉斯_赵四- Android逆向之旅,里面讲解了解析resources.arsc文件的内容。看完。

验证性尝试:
1、找出res/values/integers.xml中config_screenBrightnessSettingMinimum的值在resources.arsc中的位置

apktool反编译修改再回编译是可以输出新apk的,所以,修改config_screenBrightnessSettingMinimum的值,回编译,从apk中拿出resources.arsc文件。再修改一次,使用不同的值,得到两个resources.arsc,resources1.arsc和resources2.arsc。
z在命令行中(ubuntu,下同):

$xxd resources1.arsc > dump1.txt   #用16进制的格式输出resources1.arsc文件
$xxd resources2.arsc > dump2.txt
$diff dump1.txt dump2.txt          #对比两个文件的不同

因为回编译之前只修改了一个文件的一个地方,所以最后输出的不同的地方都是改了那个地方的锅。
w我的输出是这样的(我改的两次的值是1和10),只有一行不同:

288868c288868
< 00468630: 0800 0200 561f 0000 0800 0010 0100 0000  ....V...........
---
> 00468630: 0800 0200 561f 0000 0800 0010 0a00 0000  ....V...........

b不同的这行的地址偏移量是00468630。咬定config_screenBrightnessSettingMinimum的值就放在这行,将00468630这个偏移地址确定为正确值。

2、解析resources.arsc,找config_screenBrightnessSettingMinimum的值

z使用尼古拉斯_赵四- Android逆向之旅的代码,谢谢!,找config_screenBrightnessSettingMinimum的值。

x(下面讲的东西涉及尼古拉斯_赵四兄的文章内容)
z我们要找的这个资源的值在代码的ParseResourceUtils.parseResTypeInfo(srcByte);这个方法里输出。

y因为config_screenBrightnessSettingMinimum的值是Res_value类型,不是复杂的类型。所以赵四兄的代码中ParseResourceUtils.parseResTypeInfo(srcByte);这个方法里面System.out.println("map entry:" + mapEntry);System.out.println("map:" + resMap);这两行输出可以注释掉,(可以干掉一大部分的输出。。真心多)。
j将输入的文件名改为参数输入(args[0])。

z改好之后用eclipse导出个可执行的jar包。命令行中运行:
(我导的包文件名叫ParseAndroidRes.jar)

java -jar ParseAndroidRes.jar resources.arsc> ParseResult.txt

y这个txt有85m,随便打开小心会卡,用sublime打开,搜索config_screenBrightnessSettingMinimum,找到几个匹配的地方,像这样:

======================================
resId:01 0e 00 5b 
valueOffset:00 46 86 30 
entry:size:8,flags:2,key:index:8022,str:config_screenBrightnessSettingMinimum
value:size:8,res0:0,dataType:TYPE_FIRST_INT,data:1
======================================

s虽然除了这个之外,很多个地方都匹配,但是valueOffset的值都是一样的。
valueOffset = 0x00468630,跟用第一步中用diff找到的偏移值一毛一样!

s所以就咬定这个方法是对的。

3、修改系统中直接拿到的framework-res.apk的resources.arsc

b步骤就是:
1、$ java -jar ParseAndroidRes.jar resources.arsc > ParseResult.txt , 再sublime打开,搜索config_screenBrightnessSettingMinimum,找到valueOffset。记下来。
2、vim打开resources.arsc,用:%!xxd改成16进制格式,找到偏移为刚刚记下的valueOffset的地方,改那个值!改!,改好之后 :%!xxd -r将格式转回去,:X保存退出。
3、就这样改好了resources.arsc啦,用它替换掉原来apk里面的resources.arsc。扔进手机里面,改好权限(chmod 644和chown root:root)。就可以啦,我都没重启就生效了。

s虽然这样改东西很又局限性,而且hi麻烦,但是这样有成就感啊!

D:\zzz_aotjs>java -jar apktool.jar d zzz_jjtx.apk -o jjtxApk I: Using Apktool 2.5.0 on zzz_jjtx.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Baksmaling classes2.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... D:\zzz_aotjs>java -jar apktool.jar b jjtxApk I: Using Apktool 2.5.0 I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... I: Checking whether sources has changed... I: Smaling smali_classes2 folder into classes2.dex... I: Checking whether resources has changed... I: Building resources... W: invalid resource directory name: D:\zzz_aotjs\jjtxApk\res navigation brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\ADMINI~1\AppData\Local\Temp\brut_util_Jar_88738392895362090968935970785959065127.tmp, p, --forced-package-id, 127, --min-sdk-version, 21, --target-sdk-version, 28, --version-code, 23053102, --version-name, 1.0.2, --no-version-vectors, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL7172915232282895038.tmp, -e, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL4592746138281254561.tmp, -0, arsc, -I, C:\Users\Administrator\AppData\Local\apktool\framework\1.apk, -S, D:\zzz_aotjs\jjtxApk\res, -M, D:\zzz_aotjs\jjtxApk\AndroidManifest.xml] D:\zzz_aotjs>
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值