一、目标
李老板:奋飞呀,最近耍小程序的比较多,而且貌似js好耍一点?要不咱们也试试?
奋飞: 你是老板,你说了算喽。
第一次搞小程序,得找个软柿子捏,就找个以前分析过的某段子App的小程序吧。
-
反编译
-
静态分析
-
动态调试
二、步骤
春天在哪里?
app下载回来就是apk包,那么小程序在哪里?
小程序是一个以 wxapkg 为后缀的文件,在android手机的 /data/data/com.tencent.mm/MicroMsg/用户id/appbrand/pkg/ 里面找, 例如在我的测试手机里面就在
/data/data/com.tencent.mm/MicroMsg/9099d679ace11f72569bd530813a28ff/appbrand/pkg
这个目录下面。可是下面一堆数字命令的文件,哪个才是我们要找的某段子App的小程序呢?
两个办法: . 把所有的小程序都删除,就留一个,那这个文件就是了。 . 把某段子App的小程序删除,然后再重装一下。 看文件日期,最新的就是了。
反编译
wxapkg文件肯定没法直接分析的了,我敢打赌它一定可以反编译出js文件。
github.com/ezshine/wxa…
从releases里面下载他编译好的wxapkg-convertor可执行程序。
把wxapkg文件拖到 wxapkg-convertor 的界面里面可以反编译出js源码出来。
我们先试试 分析一下这个 websign 的来历
首先搜索一下 websign 字符串
./3AAE21D3932643BF5CC849D4DA8F8236.js:3:if (!e) return console.error("websign arguments error"), ""; ./3AAE21D3932643BF5CC849D4DA8F8236.js:6:return n.length < 20 ? (console.error("websign length error"), "") : "v2-".concat(o("".concat(e).concat(o(n)))); ./3AAE21D3932643BF5CC849D4DA8F8236.js:98:url: "".concat(n, "/account/nonce?websign=").concat(i(c)), ./3AAE21D3932643BF5CC849D4DA8F8236.js:124:url: "".concat(n, "/account/auth?websign=").concat(i(u)), ./3AAE21D3932643BF5CC849D4DA8F8236.js:178:var ff = "".concat(n).concat(s).concat(e, "?websign=").concat(i(d)); ./3AAE21D3932643BF5CC849D4DA8F8236.js:180:url: "".concat(n).concat(s).concat(e, "?websign=").concat(i(d)),
很幸运,看上去就在这个js里面的 i(d) 函数里。
动态调试
既然反编译出来了js源码,能否动态调试下,这样分析起来更方便了?
答案是可以的,下载 微信开发者工具,把刚才反编译的工程导入进来。
记得在 设置->项目设置 中把 “不校检合法域名...” 这一项勾上。
这样代码貌似可以跑起来, 我们在 i 函数下个断点,发下它可以进来了。
分析一下
我们调试的时候发现它并没有生成websign,t.h_m为空,导致后面没有生成,这个难不倒我们,从抓包结果里面找一个 h_m的值,写死一下,就顺利跑出结果了。
var e = t.h_m; // 修改成 var e = 257167182;// t.h_m;
从js代码里看,i函数里面最后调用了o(n), 而
o = require("E5CA98B6932643BF83ACF0B13A9F8236.js").md5
这么明显的md5,我们来试试,在i函数里面加一个代码
var t1Use = o("123456");
首先在Mac下我们算下结果
ffNewMac:Downloads fenfei$ md5 -s 123456 MD5 ("123456") = e10adc3949ba59abbe56e057f20f883e
然后再调试下这个工程,看看t1Use的值
确认过眼神,就是MD5。
三、总结
搞个新玩意的时候,先找个软柿子捏,不要一下就想放个大卫星。
能反编译,然后再动态调试,那么曙光就在眼前。
这个样本运气好,肉眼就可以看出是md5,复杂的js算法,可以考虑 PyExecJS、js2py or Node.js 来跑。
所有的故事都会有结局,只有生活跟你没完。
TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。
络安全入门学习路线
其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。
1.网络安全法和了解电脑基础
其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...
别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相关视频,你搜关键词网络安全工程师会出现很多相关的视频教程,我粗略的看了一下,排名第一的视频就讲的很详细。 当然你也可以看下面这个视频教程仅展示部分截图: 学到http和https抓包后能读懂它在说什么就行。
2.网络基础和编程语言
3.入手Web安全
web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗! 想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要了解点,然后再学点python,起码得看懂部分代码吧。
最后网站开发知识多少也要了解点,不过别紧张,只是学习基础知识。
等你用几周的时间学完这些,基本上算是具备了入门合格渗透工程师的资格,记得上述的重点要重点关注哦! 再就是,要正式进入web安全领域,得学会web渗透,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/命令执行等。
这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击手段都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。
学完web渗透还不算完,还得掌握相关系统层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗透。可能到这里大家已经不知所云了,不过不要紧,等你学会了web渗透再来看会发现很简单。
其实学会了这几步,你就正式从新手小白晋升为入门学员了,真的不算难,你上你也行。
4.安全体系
不过我们这个水平也就算个渗透测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。
所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实自己的技能就会被淘汰。
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。文章来源:https://www.toymoban.com/news/detail-461962.html
尾言
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,最后联合CSDN整理了一套【282G】网络安全从入门到精通资料包,需要的小伙伴可以点击链接领取哦!文章来源地址https://www.toymoban.com/news/detail-461962.html
到了这里,关于小程序逆向分析 (一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!