x屏幕最低亮度的值在apk项目的res/values/integers.xml中定义:
有一行:
<integer name="config_screenBrightnessSettingMinimum">10integer>
里面设置的10,就是最低亮度,可以改成1或者2. 但是有人说调太低会出事。。。不管,xposed的GravityBox模块中也有调整最低亮度的设置, 设成最低没出问题。
反编译能出来东西,但是报错:
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看到报错说找不到某个资源。 不行。
找到文章尼古拉斯_赵四- Android逆向之旅,里面讲解了解析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这个偏移地址确定为正确值。
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所以就咬定这个方法是对的。
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麻烦,但是这样有成就感啊!