吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16017|回复: 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] 纯文本查看 复制代码
@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, 2024-12-23 10:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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