折腾:
【已解决】尝试破解小花生app安卓apk希望看到api返回的json中的J的解密算法得到明文
期间,已经试了最新3.6版本的apk,结果hook出的dex文件,转换得到的jar包中,没有我们要的app的业务逻辑的代码。
且dex文件大小也只有200B,也不是正常的1,2MB,5,6MB那种,所以肯定也不对。
所以就想着,换个之前的旧版本,看看hook出的dex文件大小是否是否希望的大小,
以及dex导出jar包源码中是否包含app的业务逻辑代码。
然后继续参考之前的:
【已解决】用基于Procyon的Luyten反编译安卓jar包得到java源码
和:
【已解决】mac中用dex2jar反编译dex文件导出jar包文件
以及期间参考了:
【记录】从反编译安卓apk得到的java源码代码中尝试找返回json中J加密的逻辑和线索
想要去找,最新版本中的:
- classroom
- SelfReadingCategoryActivity
- ParentChildReadingActivity
两个类,因为是最直接的相关页面的代码
去试了试v1.5的apk

重新用夜神安卓模拟器中的XPosed+FDex2,hook导出后,真的有比较大的,比如1MB,6MB多的dex文件:

然后去导出来

然后再去把这几个dex文件去反编译得到java源代码。
又导出(虽然中间有报错) 了一个jar包:
1 2 3 4 5 6 7 | ➜ v1.5 pwd /Users/crifan/dev/dev_root/company/xxx/projects/crawl_data/ 小花生app /xiaohuasheng/decoded dex /v1 .5 ➜ v1.5 ll ... -rw------- 1 crifan staff 5.1M 3 18 13:56 com.huili.readingclub8725900-dex2jar.jar -rw-r--r-- 1 crifan staff 70K 3 18 13:56 com.huili.readingclub8725900-error.zip -rw------- 1 crifan staff 8.3M 3 18 13:29 com.huili.readingclub8725900.dex |
去试试从jar包导出java源码:
发现此包里的代码都是Android自己的:

即:
目前结论:
v1.5的apk导出的hex中,8.3MB的dex导出的jar,不是我们要的。
所以继续尝试其他dex文件转jar包,看看是否有自己要的app的业务逻辑的代码。
但是没看到如何说从dex转jar的命令
android dex2jar dex to jar
直接试试算了:
1 | sh /Users/crifan/dev/dev_tool/android/reverse \ engineering /dex-tools/dex-tools-2 .1-SNAPSHOT /d2j-dex2jar .sh -f com.huili.readingclub8725900.dex |
期间还有输出错误,详见:
【未解决】dex2jar反编译dex后jar文件包含java代码:throw new VerifyError bad dex opcode
最后输出5.1MB的jar和zip的error的文件:
1 2 3 4 5 6 | ➜ v1.5 ll total 48896 ... -rw------- 1 crifan staff 5.1M 3 18 13:56 com.huili.readingclub8725900-dex2jar.jar -rw-r--r-- 1 crifan staff 70K 3 18 13:56 com.huili.readingclub8725900-error.zip -rw------- 1 crifan staff 8.3M 3 18 13:29 com.huili.readingclub8725900.dex |
先不管,先去:
【已解决】用Procyon反编译安卓apk的jar包得到java源码
继续看看jar包
com.huili.readingclub8725900-dex2jar.jar
中是否有我们要的源码。
结果只是Android自己的,不是app的代码。
继续试试其他dex文件:
6.5MB的
com.huili.readingclub6477804.dex
提取出的:
com.huili.readingclub6477804-dex2jar.jar
其中是有部分业务逻辑代码的:

但是很明显,大部分都是看不到我们要的,调用api接口以及如何回调处理的代码,且很多都是
throw new VerifyError(“bad dex opcode”)
的错误代码。
然后继续去试试。
后来也找到一部分是我们需要的,调用api接口的代码:

即:
v1.5的apk导出的hex中,6.5MB的dex导出的jar,可能是我们要的。
但是问题是:
(1)之前用d2j-dex2jar.sh从dex转出jar时,很多报错,导致导出后的jar包中代码很多都是:
1 | throw new VerifyError( "bad dex opcode" ) |
无法看到真正的代码。
(2)及时完全看到代码,也不是完全符合我们的期望:
因为此处是v1.5的旧版本,和最新v3.6的页面还不完全一样,导致也不太好找我们要的api和返回的数据的加解密
所以现在打算:
尝试中间的某个版本,比如之前找到的
- v3.4
看看效果如何
先去:
【未解决】dex2jar反编译dex后jar文件包含java代码:throw new VerifyError bad dex opcode
所以还是去对于前面dex2jar后的jar去导出代码,去看看
不过导出之前,再去看看另外几个dex文件如何
1 2 3 4 5 6 7 8 9 | ➜ v1.5 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2 .1-SNAPSHOT /d2j-dex2jar .sh -f com.huili.readingclub2847840.dex ... GLITCH: 0006 Lsun /misc/Unsafe ;.unpark(Ljava /lang/Object ;)V | zero-width instruction op =0xf8 Detail Error Information in File . /com .huili.readingclub2847840-error.zip Please report this file to one of following link if possible (any one). https: //sourceforge .net /p/dex2jar/tickets/ https: //bitbucket .org /pxb1988/dex2jar/issues https: //github .com /pxb1988/dex2jar/issues dex2jar@googlegroups.com |
以及:
1 2 3 4 5 6 7 8 9 | ➜ v1.5 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2 .1-SNAPSHOT /d2j-dex2jar .sh -f com.huili.readingclub1340496.dex ... GLITCH: 0000 Lorg /ccil/cowan/tagsoup/jaxp/SAXParserImpl ;.setProperty(Ljava /lang/String ;Ljava /lang/Object ;)V | zero-width instruction op =0xf4 Detail Error Information in File . /com .huili.readingclub1340496-error.zip Please report this file to one of following link if possible (any one). https: //sourceforge .net /p/dex2jar/tickets/ https: //bitbucket .org /pxb1988/dex2jar/issues https: //github .com /pxb1988/dex2jar/issues dex2jar@googlegroups.com |
和:
1 2 3 4 5 6 7 8 9 | ➜ v1.5 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2 .1-SNAPSHOT /d2j-dex2jar .sh -f com.huili.readingclub191572.dex ... GLITCH: 0006 Lcom /android/okhttp/internal/tls/OkHostnameVerifier ;.verifyHostName(Ljava /lang/String ;Ljava /lang/String ;)Z | zero-width instruction op =0xee Detail Error Information in File . /com .huili.readingclub191572-error.zip Please report this file to one of following link if possible (any one). https: //sourceforge .net /p/dex2jar/tickets/ https: //bitbucket .org /pxb1988/dex2jar/issues https: //github .com /pxb1988/dex2jar/issues dex2jar@googlegroups.com |
和:
1 2 3 4 | / Users / crifan / dev / dev_tool / android / reverse_engineering / dex - tools / dex - tools - 2.1 - SNAPSHOT / d2j - dex2jar.sh - f com.huili.readingclub17872.dex ... GLITCH: 0000 Ljust / trust / me / R$style;.<init>()V | zero - width instruction op = 0xf0 GLITCH: 0000 Ljust / trust / me / R;.<init>()V | zero - width instruction op = 0xf0 |
然后去看看导出的jar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ➜ v1.5 ll total 63072 -rw------- 1 crifan staff 758K 3 18 17:05 com.huili.readingclub1340496-dex2jar.jar -rw-r--r-- 1 crifan staff 28K 3 18 17:05 com.huili.readingclub1340496-error.zip -rw------- 1 crifan staff 1.3M 3 18 13:29 com.huili.readingclub1340496.dex -rw------- 1 crifan staff 20K 3 18 17:07 com.huili.readingclub17872-dex2jar.jar -rw------- 1 crifan staff 17K 3 18 13:29 com.huili.readingclub17872.dex -rw------- 1 crifan staff 103K 3 18 17:06 com.huili.readingclub191572-dex2jar.jar -rw-r--r-- 1 crifan staff 7.3K 3 18 17:06 com.huili.readingclub191572-error.zip -rw------- 1 crifan staff 187K 3 18 13:29 com.huili.readingclub191572.dex -rw------- 1 crifan staff 1.6M 3 18 16:59 com.huili.readingclub2847840-dex2jar.jar -rw-r--r-- 1 crifan staff 48K 3 18 16:59 com.huili.readingclub2847840-error.zip -rw------- 1 crifan staff 2.7M 3 18 13:29 com.huili.readingclub2847840.dex -rw------- 1 crifan staff 4.2M 3 18 14:07 com.huili.readingclub6477804-dex2jar.jar -rw-r--r-- 1 crifan staff 93K 3 18 14:07 com.huili.readingclub6477804-error.zip -rw------- 1 crifan staff 6.2M 3 18 13:29 com.huili.readingclub6477804.dex -rw------- 1 crifan staff 5.1M 3 18 13:56 com.huili.readingclub8725900-dex2jar.jar -rw-r--r-- 1 crifan staff 70K 3 18 13:56 com.huili.readingclub8725900-error.zip -rw------- 1 crifan staff 8.3M 3 18 13:29 com.huili.readingclub8725900.dex |
然后分别去用Luyten去打开jar包看看代码
再去导出java代码看看
搜出来的代码中,有一丁点参考和确认的是:
com/huili/readingclub/config/DataStruct.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.huili.readingclub.config; public class DataStruct { public static final int DATA_TYPE_BASE64 = 2 ; public static final int DATA_TYPE_GZIP = 3 ; public static final int DATA_TYPE_NORMAL = 1 ; public static final String ERROR_NO = "errno" ; public static final String JSON_DATA = "J" ; public static final String JSON_ERROR = "error" ; public static final String JSON_OK = "1001" ; public static final String JSON_RESULT = "M" ; public static final String JSON_TOTAL = "total" ; public static final String NEARBY_DISTINCE_KEY = "nearbyDistinceKey" ; public static final String PHPSESSID = "PHPSESSID" ; public static final int QQ = 1 ; public static final int SINA = 2 ; public static final int WECHAT = 3 ; ... |
中的:
- JSON_DATA是我们关注的J
- JSON_OK是1001
另外的:
com.huili.readingclub2847840.dex
对应的:
com.huili.readingclub2847840-dex2jar.jar
打开后发现也都是第三方的库,比如Android的,dalvik的,java的等等:

而没有我们要的app自己的代码
com.huili.readingclub1340496.dex
的
com.huili.readingclub1340496-dex2jar.jar

也是第三方库。
com.huili.readingclub191572.dex
的
com.huili.readingclub191572-dex2jar.jar

都是网络库okhttp的代码。
com.huili.readingclub17872.dex
的
com.huili.readingclub17872-dex2jar.jar

是just.trust.me的代码
-》只有前面的:
6.5MB的com.huili.readingclub6477804.dex
导出的:4.5MB的com.huili.readingclub6477804-dex2jar.jar
中间包含app相关的业务逻辑代码
com/huili/readingclub/
等等内容。
然后去搜:
Reading.svc
看到:
com/huili/readingclub/config/MyConfig.java
中有所有的api的定义:

但是url
QUERY_RECENT_POPULAR_BOOK_URL
别处却找不到:

-》看来还是无法破解得到原始的代码
->感觉问题又回到了之前的:
【未解决】dex2jar反编译dex后jar文件包含java代码:throw new VerifyError bad dex opcode
必须要解决了bad dex opcode后,才能看到源码
然后继续去:
【无需解决】安卓apk反编译出的smali反向破解出java原始代码
然后再去试试,之前的v.3.4.8的版本,用FDex2导出dex效果如何:
【已解决】小花生安卓app的v3.4.8版破解后找到源码中是否包含J字段的加密逻辑
接下来就是要去分析:
对于json中的J,如何解密了。
【已未解决】从反编译小花生apk得到的包含业务逻辑代码中找到J字段解码的逻辑并用Python实现