记一次 逆向 autoJs 的过程

一、准备:

一个 用autoJs 写的 Apk;

AndroidKiller 工具;

adb工具;

JAVA SDK;

android studio;

adb  java  环境变量配置好;

androidKiller 的apkTools换成最新的;

二、开始逆向:

1.使用 androidKiller 反编译 autoJs.apk

```java

得到工程目录

assets->project : autoJs 的配置目录

project.json 配置 App 和Js的使用

main.js 是App进入后使用的,有可能被加密;

smali 文件夹 源码被编译后的;(修改app 需要在这里面操作)

```

2.核心文件介绍

```java

加密,解密,初始化 js的地方

```

```java

StringScriptSource 是 可以获取到 main.js 的地方,解密后的main .js 也是在这里

```

3.如果 main.js 被加密,破解办法之一:

```java

在 StringScriptSource.smali 文件中,找到 有两个参数的构造函数,在 return 前面加入 字符串 存入file 的代码,

代码必须是 smali 语法的;

可以通过 android studio 写 string 字符串存入file 的代码

  1. try{
  2. FileOutputStream outputStream=new FileOutputStream('/sdcard/'+paramString1);
  3. OutputStreamWriter streamWriter=new OutputStreamWriter(outputStream,'UTF-8');
  4. streamWriter.write(paramString2);
  5. streamWriter.flush();
  6. streamWriter.close();
  7. outputStream.close();
  8. }catch (Exception e){
  9. e.printStackTrace();
  10. }

然后打包成Apk,逆向Apk ,在smali文件夹中找到编译后的代码

  1. * :try_start_0
  2. * new-instance v0, Ljava/io/FileOutputStream;
  3. *
  4. * new-instance v1, Ljava/lang/StringBuilder;
  5. *
  6. * invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
  7. *
  8. * const-string v2, '/sdcard/'
  9. *
  10. * invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  11. *
  12. * invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  13. *
  14. * invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  15. *
  16. * move-result-object p1
  17. *
  18. * invoke-direct {v0, p1}, Ljava/io/FileOutputStream;-><init>(Ljava/lang/String;)V
  19. *
  20. * .line 43
  21. * new-instance p1, Ljava/io/OutputStreamWriter;
  22. *
  23. * const-string v1, 'UTF-8'
  24. *
  25. * invoke-direct {p1, v0, v1}, Ljava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/lang/String;)V
  26. *
  27. * .line 44
  28. * invoke-virtual {p1, p2}, Ljava/io/OutputStreamWriter;->write(Ljava/lang/String;)V
  29. *
  30. * .line 45
  31. * invoke-virtual {p1}, Ljava/io/OutputStreamWriter;->flush()V
  32. *
  33. * .line 46
  34. * invoke-virtual {p1}, Ljava/io/OutputStreamWriter;->close()V
  35. *
  36. * .line 47
  37. * invoke-virtual {v0}, Ljava/io/FileOutputStream;->close()V
  38. * :try_end_0
  39. * .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
  40. *
  41. * goto :goto_0
  42. *
  43. * :catch_0
  44. * move-exception p1
  45. *
  46. * .line 49
  47. * invoke-virtual {p1}, Ljava/lang/Exception;->printStackTrace()V
  48. *
  49. * :goto_0

复制到 StringScriptSource.smali 中的箭头处,保存,重新编译打包 Apk ;

使用  AndroidKiller 重新打包 AutoJs的apk 时,需要注意几点,

1. apktool 必须要最新的,可以从官网下载;

2.打包编译时,可以能会报资源不存在的错误,通过日志,找到文件的代码,删除即可;

3.打包好后的apk ,可以通过adb命令 adb install -r  d:aaa.apk 安装到手机;

4. autojs 安装打开进入主界面后,应该就可以在手机的 /sdcard/目录 找到新生成的文件,这个文件里面就是 解密后的 main.js

```

4.把解密后的main.js 重新打包

```java

拿到 破解后的 main.js 后,放入assets的project目录中;

修改 project.json 配置 的 encryptLevel 为 0,就是可以直接使用 没有加密的 main.js了;

修改其他参数后,重新打包即可

```

后记:

```java

此方法不用hook,也能拿到 解密后 的 main.js后做修改

autoJs 加密和解密的函数都能找到,但是 安卓源码被混淆过,个人能力有限,不能 加密,解密的 函数,只能取巧,完成破解。

```

参考资料: 

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1112407

https://www.52pojie.cn/forum.php?mod=viewthread&tid=980158&page=1

https://www.jianshu.com/p/e568f711a333

(0)

相关推荐

  • 【新提醒】Log工具类(含食用说明和演练)

    本帖最后由 ꯭清꯭羽꯭ღ 于 2019-6-27 17:57 编辑 在这里,丢一个自制的Log工具类,用于逆向分析和调试,特点: ◎可以输出任何格式的对象(String Object等等) ◎显示输出 ...

  • 记服葛根汤治感冒的过程

    早几天,因为天气寒冷,不小心着凉了,出现了感冒.咽喉疼痛,一吞口水就疼,额头也疼,以眉间明显,有点低烧,37.8℃,还有点怕冷.感冒不是很重,精神还好.想起几句口诀:葛根浮长主阳明,缘缘面赤额头疼,发 ...

  • 记一次钓鱼邮件分析过程

    来自公众号:信安之路 今天打开邮件,无意中发现了一封全英文的报价信息邮件,附件是 html 的网页文件.NND,我们就一个破小公司充其量也就做几单本地业务哪来的国际大单呢,嘿嘿,既然人家给咱报价了,来 ...

  • 抄板:逆向研发的过程

    在开发产品时,一般的流程是先设计原理图,再去设计PCB板,这个过程叫做正向研发.有时候也会反过来,从电路板去推原理图,这个过程叫做逆向研发,一般竞争对手或者新入行者会通过这种方式研究别人的产品.也有专 ...

  • 人生如马|记第一次跑半马的过程

    刚开始跑步时,总以为跑半马是一个天文数字.待成功完成了第一个半马后,才觉得想去做一件事,只要坚持了下去,总有一天能实现. 心里有跑半马的想法,源于自己参加线上10公里比赛已经有30场了.也源于汝城玖玖 ...

  • 记一次游戏私服getshell过程

    晚上闲着无聊,想做点事情,用fofa搜了一下站点,想挖几个洞,结果看到了一个游戏私服的宣传网站,我这一看跟我之前搞过的一个站好像是一套源码.就试着想搞一搞,正好记录一下写个文章,废话不多说了,开搞. ...

  • 边想边写:记一次体检的过程

    记一次体检的过程 文/海拔3500米 排队.护士叫着自己的名字 测量身高.体重,量血压 这几个数字总是很揪心 14岁时由于身高.体重不达标而担心 现在,由于体重.血压太高而烦心 抽血.一见针就害怕 总 ...

  • 《乐记》相关作乐之事并乐之成型过程——重读经典文献笔记之一(一)

    作者:韩锺恩 内容提要:文章以<礼记·乐记>与<史记·乐书>为主体,参照相关译注.校订.校释,以及其他文献,再行读解释解.通过对相关声-音-乐-情的本体论叙事.相关音-声-事- ...

  • 学习编程的过程中,一直记不住自己所学知识!你应该怎么办?

    首先,在学习编程语言的过程中,都会出现一定的遗忘问题,这是一个自然的规律,也并不是所有学习过的内容都需要牢牢记住,很多编程知识是需要理解的,在运用的过程中,如何逐渐形成自己的编程思想,这是更应该关注的 ...

  • 记一次渗透内网获取域控的过程

    渗透目标:获取域控内某台ftp服务器中的文件 0x01入口 钓鱼附件的形式获得了一个meterpreter 收集信息发现:当前用户为user,user在管理组里面,这种可以通过bypassuac提权到 ...