折腾:
【已解决】尝试破解小花生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包:
➜ 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
直接试试算了:
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的文件:
➜ 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包中代码很多都是:
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文件如何
➜ 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 [email protected]
以及:
➜ 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 [email protected]
和:
➜ 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 [email protected]
和:
/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:
➜ 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
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的定义:
public static final String QUERY_RECENT_POPULAR_BOOK_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/queryRecentPopularBook"; public static final String QUERY_RECOMMENDED_FEED_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/queryRecommendedFeed"; public static final String QUERY_RECOMMENDED_READINGBBSTOPIC2_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/queryRecommendedReadingBbsTopic2"; public static final String QUERY_RECOMMENDED_USERBOOKLIST_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/queryRecommendedUserBooklist"; public static final String QUERY_RECOMMENT_BOOKS_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/queryRecommendedBookComment2"; ... public static final String SEARCH_BOOKFRIENDS2_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/searchBookFriends2"; public static final String SEARCH_BOOKTAGS_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/searchBookTag"; public static final String SEARCH_BOOK_FRIENDGROUP_URL = "http://www.xiaohuasheng.cn:83/Reading.svc/searchBookFriendGroup"; ...
但是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实现