最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】从不同版本的小花生apk中反编译出包含业务逻辑代码的dex和jar包源码

apk crifan 1462浏览 0评论
折腾:
【已解决】尝试破解小花生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的业务逻辑的代码。
再去导出v1.5版本hook出的其他剩余的dex:
但是没看到如何说从dex转jar的命令
android dex2jar dex to jar
Does dex2jar support multidex? · Issue #63 · pxb1988/dex2jar
dex2jar / Wiki / UserGuide
直接试试算了:
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实现

转载请注明:在路上 » 【已解决】从不同版本的小花生apk中反编译出包含业务逻辑代码的dex和jar包源码

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
80 queries in 0.182 seconds, using 22.21MB memory