XhyEax 发表于 2016-8-24 09:47

修改反编译资源文件报错(resource spec)

本帖最后由 XhyEax 于 2019-2-28 17:30 编辑

## 关于`0x01010540`错误
`0x01010540`是因为SDK版本太高,反编译工具识别不出来,需要替换成`0x0101048f`
具体方法见后文
## 关于`0x01010543`错误
如果只有
```
Exception in thread "main" b.a.a.e: resource spec: 0x01010543
```
没有`UndefinedResObject`
则更换`apktool`后再试
`apktool`可以在[爱盘](https://down.52pojie.cn/Tools/Android_Tools/)下载

实在要修复的话,往下看:(都是修改`resources.arsc`)

## 修复UndefinedResObject错误
报错信息:
```
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x7f000006
```

### 解决方法
`aapt dump`查看apk的资源信息,并保存到文件
```
aapt d --values resources test.apk >1.txt
```
找到`DataType`数据类型不正确的值(搜索`attribute`即可)对应的描述符(一般是把7f改成00,`0x00000006`)
文件中没有识别出正确的数据类型,显示的是`(attribute) 0x00000006`
使用`010Editor`,Ctrl+F,字节形式搜索对应描述的16进制数的小端字节(就是`00000006`写成`06000000`)
然后把它前面的字节`0x02`修改为`0x03`,保存后替换进apk即可
## 修复resource spec: 0x01010543
报错信息:
```
Exception in thread "main" b.a.a.e: resource spec: 0x01010543
```
### 解决方法
使用`010Editor`,Ctrl+F,字节形式搜索报错的16进制数的小端字节(就是`12345678`写成`78564312`)
这里我们搜索`43050101`,然后把它前面的字节`0x02`修改为`0x03`,保存后替换进apk即可
## 修复resource spec: 0x01010540
`0x01010540`是因为SDK版本太高,反编译工具识别不出来,需要替换成`0x0101048f`
### 解决方法
使用`010Editor`,Ctrl+F,字节形式搜索报错的16进制数的小端字节(就是`40050101`换成`8f040101`)
## 参考
[记录Android Killer反编译时遇到的异常](https://blog.csdn.net/u012400885/article/details/80409689)
[保护Android resources文件不被反编译原理分析](http://blog.csdn.net/pwelyn/article/details/50620136)

lyrong 发表于 2018-8-11 11:59

您好 最近手上有一款安卓APP 想逆向分析
但是对于您的解释 有点不解

错误解决方法
1.使用010Editor 16进制搜索报错的 0x16进制数字 的倒序
例如:报错位置是0x010104e2 那么搜索 e4040101

为什么0x010104e2倒序会变成e4040101
另外,我的反编译报错信息是:
>Exception in thread "main" java.lang.reflect.InvocationTargetException
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>        at java.lang.reflect.Method.invoke(Method.java:498)
>        at b.a.d.b.a.a(Unknown Source)
>        at b.a.d.b.a.b(Unknown Source)
>        at b.a.d.b.a.a(Unknown Source)
>        at b.a.d.a.a(Unknown Source)
>        at b.a.d.a.a(Unknown Source)
>        at b.a.d.a.a(Unknown Source)
>        at b.a.a.a(Unknown Source)
>        at b.a.E.b(Unknown Source)
>        at b.a.E.a(Unknown Source)
>        at b.b.a.a(Unknown Source)
>        at b.b.a.a(Unknown Source)
>        at com.rover12421.shaka.cli.Main.main(Unknown Source)
>Caused by: b.a.D: Invalid chunk type: expected=0x00000002, got=0x0000aa4c
>        at b.a.d.b.a.b(Unknown Source)
>        at b.a.d.b.a.nextChunkCheckType(Unknown Source)
>        ... 16 more

希望您能看看,针对我的这种出错,如何修复使得能反编译呢?谢谢呢!

XhyEax 发表于 2018-8-15 16:30

lyrong 发表于 2018-8-11 11:59
您好 最近手上有一款安卓APP 想逆向分析
但是对于您的解释 有点不解



aapt dump查看apk的资源aapt d --values resources test.apk
找到0x010104e2 发现资源描述是010104e4

XhyEax 发表于 2016-8-24 09:51

至于为什么要修改为03 ,博文里面有说。我就再转一次。修改数据类型 让他解析正常




也可以参考下这篇帖子:http://bbs.pediy.com/showthread.php?p=1415499


Gordon0918 发表于 2016-8-24 10:11

多谢楼主分享

china-loong 发表于 2016-8-24 12:00

不大懂你在说啥子

21882068 发表于 2016-11-16 19:53

学习一下,努力

DCCCc 发表于 2017-2-22 09:07

您好 请问这样该怎么解决?

小灰灰~ 发表于 2017-12-13 16:18

表示操作失败了,修改后还是无法反编译,我会搜索出来2个,

XhyEax 发表于 2018-1-7 20:10

小灰灰~ 发表于 2017-12-13 16:18
表示操作失败了,修改后还是无法反编译,我会搜索出来2个,

那就换过一个框架资源apk试试
页: [1] 2
查看完整版本: 修改反编译资源文件报错(resource spec)