专栏首页FreeBufFrida之Pin码破解实验

Frida之Pin码破解实验

0×00前言

在网上搜了一些frida破解Pin码的文章,不动手写点代码总感觉理解不深入的念头又升起来了,于是决定找一个开源pin码,然后改一改再破解。

特别感谢南尘分享的源代码

https://github.com/nanchen2251/PinView

0×01实验环境

基础环境:win10,Android studio 3,python 2.7(32),frida10.6.33

模拟器:(这里的模拟器是arm架构)

APP:Lollipin,PinView

0×02 APP二次开发

1、下载pinview源码:https://github.com/nanchen2251/PinView

2、使用sutdio打开工程并修改app_name为PinCrack

3、修改mainActivity,创建函数checkLogin,把输入的pin码和预设的pin码进行比较

4、修改mainActivity,创建函数checkPinRes,如果密码正确则显示“密码正确”,如果密码错误则显示“输入错误,还可尝试n(n<5)次”,如果连续输错5次则需要等待10秒

5、创建类AuthCheck ,checkPin用来校验pin码是否正确,并且根据结果返回布尔值

6、运行程序,输入正确的pin码,返回“密码正确”

7、输入错误的密码,返回“输入错误,还可输入n次”

0×03 实验内容

1、编写脚本,借助frida对pinview进行pin码爆破

2、编写脚本,利用反向思路对lollipin进行爆破

0×04 实验步骤

1、下载

fridafrida_server(https://github.com/frida/frida/releases)

2、下载完成并解压,修改文件名为frida-server,并使用adb上传到模拟器中并运行,执行以下命令

3、转发android TCP端口到本地,另外打开新的命令窗口,输入以下命令:

4、执行命令:frida-ps -R,如果出现android手机的进程列表说明搭建成功

5、编写python脚本,其中关键三行都有注释

6、开始爆破,当找到正确的pin码时停止爆破

0×05 反向思路爆破lollipin

1、拿到APK后首先进行反编译,用winrar打开apk,解压出class.dex

2、使用dex2jar-2.0把dex转换成jar,执行命令d2j-dex2jar.bat clesses.dex后会生成clesses-dex2jar.jar,使用jd-gui打开clesses-dex2jar.jar

反编译后的的关键就是定位关键代码,在静态调试中一般有三种方法(信息反馈法,特征函数法,顺序查看法)

信息反馈法:假设我们现在拿到的是一个非开源的,那么这个时候我们首先通过观察输入不同pin码返回到界面的字符串,然后根据不同值搜索代码,但是很不幸,lollipin没有给我们这个机会。 特征函数法:与信息反馈法相似搜索toast函数,很不幸,这个方法在这里也没有什么效果 顺序查看法:从启动代码开始逐渐分析,这种方法比较费时

3、假设我们经过一段艰苦的搜索,终于找到希望checkPassword,通过观察代码可以推测在这里把传进来的pin码前后拼接字符串再SHA1加密,然后与shared_prefs中存储的密码进行比较并且返回一个布尔值。接下来我们要看这个函数是被那个类调用的

通过查找,我们发现有一个名叫onPinCodeInputed的函数(看名字就像是监听pin 码输入),代码中有一个if判断,关键代码this . mLockManager.getAppLock().checkPasscode(this.mPinCode)

这个时候我们去搜索getAppLock,会发现getAppLock定义在 LockManager类中,作用是返回一个AppLock类的实例,到此我们已经就可以理清调用关系了

可以整理出调用关系:LockManager的getAppLock方法调用了 AppLock的checkPasscode方法检验pin码,

4、结合我们之前的代码可以写如下利用脚本

5、执行脚本开始破解,破解成功可以看到如下图

0×06 实验结果分析与总结

通过正反两种思路对比,我们可以看到要想编写好python脚本的关键是正确理解代码里的函数调用关系(如果是自己写,判断函数的返回值需要是boolean型)。之前在网上看到一篇文章http://blog.csdn.net/u010835288/article/details/78238246?locationNum=10&fps=1其中提到使用frida爆破Sieve的PIN码,一开始我直接执行别人的脚本,发现怎么也无法正确执行,于是我把Sieve反编译了,发现函数的返回类型是void,猜测可能是博主的版本和我测试的版本不一样,所以他成功了而我没有成功。由此想到,多写代码,多反编译代码,知己知彼,百战不殆。

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • “优雅”的Linux漏洞:用罕见方式绕过ASLR和DEP保护机制

    最近国外研究人员公布的一段exp代码能够在打完补丁的Fedora等Linux系统上进行drive-by攻击,从而安装键盘记录器、后门和其他恶意软件。 这次的ex...

    FB客服
  • 安全咨询「全球第一」的德勤被黑,到底打了谁的脸?

    ? 本周,全球四大会计师事务所之一的Deloitte(德勤)遭到网络攻击,导致其全球电子邮件服务器被入侵。大型公司被黑我们早已见怪不怪,但这次德勤被曝出“大量...

    FB客服
  • 企业承受的攻击面扩大,安全应该考虑网络层以外的东西

    威胁企业安全的新技术频出,相关负责人应采用更全面的企业风险管理方法。 数十年以来,企业和组织都将其安全工作的重心放在网络边界防御,以及如何加强服务器、计算机和网...

    FB客服
  • Grunt :初次使用及前端构建经验

    这是我们部门前端同学cobish的学习笔记,笔者编辑了一下并分享给大家。

    金蝶云平台
  • vue-cli脚手架npm相关文件解读(5)vue-loader.conf.js

    系列文章传送门: 1、build/webpack.base.conf.js 2、build/webpack.prod.conf.js 3、build/webp...

    SmileSmith
  • 18.6.18日报

    1,修复两处小崩溃,主要是多线程渲染页面时,devtools调试下断点再执行会触发。

    龙泉寺扫地僧
  • Vue 源码分析—— 目录结构

     1.compiler 目录包含Vue.js 所有编译相关的代码。它包括把所有模板解析成ast 语法树, ast 语法树优化等功能。

    用户1197315
  • 【猫狗数据集】使用学习率衰减策略并边训练边测试

    链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw 提取码:2xq4

    西西嘛呦
  • 块77:说说Steemit里的三种货币

    关于Steemit里的三种货币Steem、Steem Dollars、Steem Power,对于每个新手来说都是个疑问。 这三种币的区别,最官方权威的解释可...

    申龙斌
  • 物联网IoT hub

    物接入(IoT Hub)是面向物联网领域开发者的全托管云服务,通过主流的物联网协议(如MQTT)通讯,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网...

    公众号php_pachong

扫码关注云+社区

领取腾讯云代金券