吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]
查看: 16214|回复: 11
收起左侧

[Android 分享] androidkiller反编java卡死的一种简便处理方法(继续与坛友的讨论)

  [复制链接]
winding 发表于 2018-1-22 08:19
本帖最后由 winding 于 2018-2-3 16:05 编辑

2018.02.03补充——该工具apk回编时有时失败,解决办法:
1.手工删除build文件夹,或者在批处理中增加一句自动删掉,自动将build文件夹删掉就好
(在最后pause 前增加一行del /s /q .\projects\%inputgc%\project\build\
2.在apktool.yml中增加忽略项。


————————————————————-——————————————————————

@冥界3大法王 这篇帖子的起因是以下两个帖子的延续 纯活人伪造一个Android Killer或APK IDE或apktool反编译失败   对《纯活人伪造一个Android Killer或APK IDE或apktool反编译失败》的一点讨论

问题的起因是对androidkiller和apkide对一些apk反编译源码卡死的问题后续救活处理的讨论。处理的方法前两个帖子讨论了,本帖是兑现承诺,顺着法王的思路,写一个能集合到androidkiller或者apkide里的自动化的小工具,实现对这类apk的逆向工程的救活。

反编译卡死的原因或许很多,本帖只讨论因为多dex,反编JAVA源码卡死的小工具的制作,只适用于该问题中这一小方面。其他因为工具版本问题等等原因,网上很多帖子了,照着更新apktools、dex2jar等插件就好。

因为现版本的apkide逆向项目是以包名作为工程文件夹的,没想到同时容纳两个dex的JAVA源码的办法,放弃了,这里仅讨论androidkiller。

一、救活的思路验证

前边贴中谈到,多dex反编JAVA源码卡死,其实是
androidkille使用dex2jar反编JAVA的时候,没有考虑存在两个或者多个dex的情况。但是多dex反编smali已经实现了,而且worksrc文件夹下还有一级smali的目录,就给我们救活留下空间了。我们的思路很简单,使用dex2jar把样本纯活人伪造一个Android Killer或APK IDE或apktool反编译失败中的classes.dex和classes2.dex分别反编为java,重新构建一下逆向工程目录就OK了。这个想法验证是可行的(法王也验证过),贴一下过程。

androidkille反编样本111.apk(我随便改了个名字),反编译源码卡死,但是smali和smali_classes2都反编成功了。另外提取apk图标文件的过程也卡掉了,所以逆向工程没有显示图标,这个只对强迫症有影响,不够美观而已,没有别的影响。前边帖子贴图很多,这里不多贴了。


1.jpg


这里复制apk原始文件的过程也卡死了,没有建好build文件夹。这个是时好时坏,我们手动建吧。仿照其他完好的逆向工程的样式,在这里新建build/apk文件夹,把111.apk改名111.zip,解压进去。刷新一下工程。

2.jpg


好了。当然,这完全是强迫症患者的习惯,其实我们只要把两个dex解压出来就好

用逆向助手(或者任何一个其他工具,都一样,核心都是dex2jar,只是提供了图形界面,方便),把build/apk下的classes.dex和classes2.dex分别转为jar。

3.jpg

操作两次,分别得到classes_dex2jar.jar和classes2_dex2jar.jar

4.jpg

把这两个jar文件复制到111\ProjectSrc下面。classes.dex是andriodkiller复制过来卡死就放这里了,没用了,删掉就好。

5.jpg

新建smali和smali_classes2两个目录,目录名称是与两个smali文件夹的名称对应的。然后直接用winrar打开两个jar文件,classes_dex2jar.jar解压到smali文件夹,2解压到smali_classes2文件夹。注意解压时候的目录层级,不要多套一层目录。

6.jpg

7.jpg

这个是2的。

刷新androidkiller工程目录,两个dex的JAVA源码都可以看了。
8.jpg


以上,我们的思路是可行的,但每次都这么操作很麻烦,我们弄个小工具。



二、小工具制作


思路是制作一个批处理软件,操作build/apk目录下(当然你也可以不建这个文件夹,随便把所有dex解压出来放到一个地方就好)的所有dex文件,分别调用dex2jar转为jar文件;然后把得到的所有jar文件复制到逆向工程对应的worksrc文件夹下;再调用winrar解压jar文件,分别放到对应的smali、smali_classes2。。。。。等等文件夹下。就是把我们刚才手动做的工作重复一遍。最后利用androidkiller预留的自定义工具栏,把这个批处理文件集成到androidkiller主界面来。

工具的主体就是一个批处理文件,做这些自动化的工作;dex2jar直接调用androidkiller文件夹下边自带的,不用准备了;复制一个绿色版的winrar文件包过来,防止找不到或者没有装winrar软件。最终成型的工具包括一个批处理文件和一个winrar文件夹。

批处理不会写。。。临时百度的。各种出错总算能运行了,这里贴出来,很丑是肯定的,只看个思路就好


[Shell] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off
 
color 0A
echo                ===========dex to Java===========
:start
cls
 
echo.请输入要处理的逆向工程名称,注意是 apk 的文件名,不是包名
set /p inputgc=
 
set current_dir=%~dp0
 
if not exist .\projects\%inputgc%\Project\build\apk\ (
echo "build文件夹未还原,请把apk文件复制到andriodkiller根目录后继续"
pause
ren %inputgc%.apk %inputgc%.zip
call .\winrar\winrar.exe x "%inputgc%.zip" -y  "projects\%inputgc%\Project\build\apk\" && del %inputgc%.zip
)
 
for /r %%i in (projects\%inputgc%\Project\build\apk\*.dex) do call .\bin\dex2jar\d2j-dex2jar.bat -f %%i && echo "反编"%%i"为jar,完成"
 
xcopy *.jar /y .\projects\%inputgc%\ProjectSrc\
ren *.jar *.zip
xcopy *.zip /y .\projects\%inputgc%\ProjectSrc\
del *.zip
 
if exist .\projects\%inputgc%\ProjectSrc\classes-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali\" && del .\projects\%inputgc%\ProjectSrc\classes-dex2jar.zip && echo "解压classes-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes2-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes2-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes2\" && del .\projects\%inputgc%\ProjectSrc\classes2-dex2jar.zip && echo "解压classes2-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes3-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes3-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes3\" && del .\projects\%inputgc%\ProjectSrc\classes3-dex2jar.zip && echo "解压classes3-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes4-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes4-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes4\" && del .\projects\%inputgc%\ProjectSrc\classes4-dex2jar.zip && echo "解压classes4-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes5-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes5-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes5\" && del .\projects\%inputgc%\ProjectSrc\classes5-dex2jar.zip && echo "解压classes5-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes6-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes6-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes6\" && del .\projects\%inputgc%\ProjectSrc\classes6-dex2jar.zip && echo "解压classes6-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes7-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes7-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes7\" && del .\projects\%inputgc%\ProjectSrc\classes7-dex2jar.zip && echo "解压classes7-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes8-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes8-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes8\" && del .\projects\%inputgc%\ProjectSrc\classes8-dex2jar.zip && echo "解压classes8-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes9-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes9-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes9\" && del .\projects\%inputgc%\ProjectSrc\classes9-dex2jar.zip && echo "解压classes9-dex2jar.jar完毕")
if exist .\projects\%inputgc%\ProjectSrc\classes10-dex2jar.zip (call .\winrar\winrar.exe x .\projects\%inputgc%\ProjectSrc\classes10-dex2jar.zip -y  ".\projects\%inputgc%\ProjectSrc\smali_classes10\" && del .\projects\%inputgc%\ProjectSrc\classes10-dex2jar.zip && echo "解压classes10-dex2jar.jar完毕")
 
echo "已处理完毕"
 
pause


最后的循环不会写,直接笨办法罗列的,罗列了10个为把以上内容存为motojava.bat(名字随意),放到andriodkiller根目录下(其实就是dex2jar和工程目录的共同上级目录,为了写相对路径方便)
运行后,1.提示输入逆向工程的名称,以便得到逆向工程的文件夹名称;2.检测工程文件夹下如果没有build文件夹,说明复制原包文件失败了,需要手动复制apk文件(本例中是111.apk)到andriodkiller根目录后继续,批处理自动调用winrar解开apk包,建立好build/apk文件夹;3.然后调用dex2jar;4.复制移动文件(重命名为zip应该是多余的,汗);5.调用androidkiller根目录下winrar文件夹下的winrar.exe解压(考虑到有的电脑没装winrar,比如我的电脑第二系统就没装,弄了个绿色版winrar方便操作)。
其中,第2步复制apk文件过来,用完后会自动删除;另外apk的文件名(不包括扩展名)应与一开始输入的逆向工程名一致,请注意。如果不是闲得蛋疼中间把apk重命名了,应该是一致的。

效果1
9.jpg
在killer根目录下,红色标准的是我们增加的文件/文件夹。这个目录下如果有其他jar文件,或者zip文件,剪切到其他地方去,不然处理的时候会删掉。如果中间提示让手动复制apk文件的时候,也是放到这个文件夹。

效果2

10.jpg
11.jpg
12.jpg
13.jpg
好啦。

三、测试


我们把刚才的逆向工程全部删掉,用androidkiller重新反编apk,卡死后关掉androidkiller重新打开,点motojava的按钮,OK!


过程截图
14.jpg
15.jpg

最后效果,两个smali文件夹都可以看java源码了。
16.jpg
17.jpg


四、说明、不足和扩展

1.androidkiller软件中各个插件的版本,最好还是更新下。
2.我们看到逆向工程的图标没有弄出来,其实是没有完成提取apk中ico以及建立文件夹属性文档的工作。可以继续完善这个批处理,自AndroidManifest.xml中提取android:icon="@drawable/????"问号的部分,就是ico文件文件名,搜索????.jng文件复制到逆向工程目录底下,改扩展名为ico,建好文件夹属性文档就与正常的逆向工程一个样了。奈何批处理不熟,单靠几个小时百度拼出来的代码老出错,我就不弄了。感兴趣的自己试试。不弄这个也不影响,但毕竟好多人都有强迫症是不是
3.通过这次动手,感觉学点批处理还是很有用的,特别是可以给androidkiller集成一些功能。原来一直喜欢用androidkiller,不喜欢apkide,纯粹习惯原因,但apkide的一些功能,比如命令行工具等等,又很眼馋,这样思路打开后可以自己给androidkiller集成上了。比如,androidkiller经常连不上模拟器,需要手动打开cmd,杀adb.exe进程,打开androidkiller的adb,打开模拟器的adb,设置转发等等,台麻烦,就可以写个批处理,集成过来,到时候一点就行了,不用每次都费事;比如,自动脱壳工具需要输入一些命令,是不是也可以考虑集成为一个批处理,放到androidkiller中来。



成品放出来吧,反正源码都贴了,不怕笑话了


链接:https://pan.baidu.com/s/1mjNScSK 密码:f7fj




免费评分

参与人数 10吾爱币 +17 热心值 +10 收起 理由
客色青青 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hbwazxf + 1 + 1 感谢分享。感谢……
qtfreet00 + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wilmeryu + 1 已经处理,感谢您对吾爱破解论坛的支持!
蟠桃居士 + 1 + 1 用心讨论,共获提升!
邪恶博士 + 2 + 1 谢谢@Thanks!
sun20052677 + 1 + 1 用心讨论,共获提升!
dwq308 + 1 + 1 我很赞同!
冥界3大法王 + 3 + 1 不错,努力中。。。
viply + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥界3大法王 发表于 2018-1-22 10:11
@winding  下面是我的一点心得,繁殖中。。。

"C:\Program Files\Java\jdk1.8.0_152\bin\jar.exe" xvf C:\classes_dex2jar.jar (-C c:\temp1这后面如何指定目录?)网上查结果,貌似是不支持的!
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

J:\BaiduYunDownload\吾爱破解工具包2.0\吾爱破解工具包\Tools\AndroidTools\ApkIDE最新3.5.0少月增强版\插件多dex反编译java\bin\unzip.exe 你的.jar -d 指定路径
================
FileMove, C:\Users\Administrator\Desktop\YuJia.apk,C:\Users\Administrator\Desktop\YuJia.rar


要先创建一个c:\123目录
D:\WinRAR\winrar\WinRAR.exe x C:\Users\Administrator\Desktop\YuJia.rar c:\123
winrar.exe 和 rar.exe 效果等价




先cd转到指定目录,不然后面出问题  
cd /d  J:\BaiduYunDownload\吾爱破解工具包2.0\吾爱破解工具包\Tools\AndroidTools\AndroidDebug V3.0\dex2jar     
J:\BaiduYunDownload\吾爱破解工具包2.0\吾爱破解工具包\Tools\AndroidTools\Android逆向助手_v2.2\lib\dex2jar\d2j-dex2jar.bat C:\Users\Administrator\Desktop\classes.dex




杨野轩 发表于 2019-1-13 14:49
楼主,我反编译酷狗app,它有7个classdex,我按照你的方法把其余6个加进去了为什么还是不能在Android killer中查看这6个java源码,仍然是说不能找到对应的java源码
psp7456 发表于 2018-1-22 08:58
支持一下,手动处理也还好。这个软件的搜索功能一般,我都是用npp的搜索~
gyh19961025 发表于 2018-1-22 12:59
感谢楼主分享
sun20052677 发表于 2018-1-22 14:00
亲自动手,必有收获
hhbluestar 发表于 2018-1-22 18:13
做個記號先……
wanmei195634 发表于 2018-1-22 20:12
了解一下,感谢楼主分享
tianya0908 发表于 2018-1-22 20:40
不错,努力中。。。
?﹏從此沉默 发表于 2018-1-23 06:43
感谢楼主分享
生如上善若水 发表于 2018-1-23 10:02
学习了,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-13 13:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表