本帖最后由 xjy666 于 2021-9-6 14:08 编辑
最近在开发一个自用的个人博客,看到前几天的一个python直播,反编译apk的classes.dex,每次都要解压缩apk,替换文件什么的,就想能不能做一个小工具,这些步骤交给电脑做。
我开发后台的框架是node + eggjs,这里直说开发思路和过程,具体什么语言只要有思路都可以实现。
1. 首先是把dex2jar工具放到服务器中,记得配置好java环境。
2. 前端上传文件,node接收前端传来的文件,采用的是stream流接收文件。
3. 将stream流转换为文件并存放到指定位置。
4. 写linux命令将该apk重命名为zip,进行解压,然后将里面的classes.dex文件移动到dex2jar的目录中。
5. 执行dex2jar转换jar包的命令。
代码如下:
需要引入的依赖是两个 fs,shelljs
[JavaScript] 纯文本查看 复制代码 async index() {
const { ctx } = this;
const parts = ctx.multipart({ autoFields: true, mode: 'stream' });
let stream;
emptyDir('/www/wwwroot/api.antcode.net/app/public/temp');
while ((stream = await parts()) !== null) {
if (!stream) {
break;
}
const writeStream = fs.createWriteStream(
`/www/wwwroot/api.antcode.net/app/public/temp/base.apk`
);
ctx.body = genResponse('文件上传成功, 请等待后台处理');
try {
await stream.pipe(writeStream);
writeStream.on('finish', () => {
shell.cd('/www/wwwroot/xxx.xxx.com/app/public/temp');
shell.exec(`mv base.apk base.rar`);
shell.exec(`unzip base.rar`);
shell.exec(`mv classes.dex /www/wwwroot/xxx.xxx.com/dex2jar-2.0`);
shell.cd('/www/wwwroot/xxx.xxx.com/dex2jar-2.0');
shell.exec('sudo chmod +x d2j-dex2jar.sh');
shell.exec('sudo chmod +x d2j-dex2jar.bat');
shell.exec('sudo chmod +x d2j_invoke.sh');
shell.exec('./d2j-dex2jar.sh ./classes.dex');
shell.exec(`mv classes-dex2jar.jar /www/wwwroot/xxx.xxx.com/app/public/temp`);
});
} catch (err) {
ctx.status = 400;
ctx.body = genResponse(null, 400, '文件上传失败');
throw err;
}
}
}
|