xjy666 发表于 2021-9-6 13:30

利用node 实现一个在线反编译apk的简单思路

本帖最后由 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
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;
      }
    }
}



页: [1]
查看完整版本: 利用node 实现一个在线反编译apk的简单思路