在上文中,我们通过分析定位到sub_130C()这个函数有很大可能性是用来做反调试检测的,并且作者开了一个新的线程,并且用了一个while来不断执行sub_130C()这个函数,所以说我们每次手动的修改TracerPid实在是不现实。

既然如此我们何不把sub_130C()这个函数给nop掉呢?为了防止nop出错,我们先在”F5”界面选择所有代码,然后用”Copy to assembly”功能,就可以把c语言代码注释到汇编代码里。

在这里我们看到如果想要注释掉sub_130C()函数,只需要注释掉000016B8这个位置上的代码即可,如果我们想要注释掉dword_62B0(3)这个函数,我们则需要注释掉000016BC-000016C4这三个位置上的代码。接下来我们选中000016B8这一行,然后再点击HexView。HexView会帮我们自动定位到000016B8这个位置。

因为ARM是没有单独的NOP指令的。于是我们采用movs r0,r0作为NOP。对应的机器码为”00 00 A0 E1”。所以我们把”13 FF FF EB”这段内容修改为”00 00 A0 E1”。

我们再回”F5”界面,就会发现sub_130C()函数已经没有了。

最后我们点击”Edit->Plugins->modifyfile”,然后就可以保存新的so文件了。我们将这个so文件覆盖原apk中的so文件,然后再重新签名。

这次我们先运行程序,再用ida加载,app并没有闪退,说明我们patch成功了。于是我们先在”Java_com_yaotong_crackme_MainActivity_securityCheck”处下断点。然后在app随便输入一个密码,点击app上的”输入密码”按钮。

程序就会暂停在”Java_com_yaotong_crackme_MainActivity_securityCheck”处。我们先按”P”再按”F5”,就可以看到反汇编的c语言了。而这里的unk_4005228C就是保存了密码字符串指针的指针。

因为是指针的指针,所以我们先双击进入这个地址。

然后在这个地址上按三下”D”,将这里的数据格式从字符转化为指针形式。

然后我们再双击进入这个地址,就可以看到最后的flag了。答案是”aiyou,bucuoo”。

这道题里我们只是用到了很简单的patch so技巧,在实战中我们不光可以NOP,我们还可以改变条件判断语句,比如将”BNE”变为” BEQ”。我们甚至可以修改跳转地址,比如直接让程序B到某个地址去执行,这样的话就不需要挨个的NOP很多语句了。要注意的是,ARM中的跳转指令是根据相对地址计算的,所以你要根据当前指令地址和目标地址来计算出相对跳转的值。

比如说00001BCC: BEQ loc_1C28对应的汇编代码为”15 00 00 0A”。

0x0A代表BEQ,”15 00 00”代表跳转的相对地址,因为在arm中pc的值是当前指令的下两条(下一条的下一条)指令的地址,所以我们需要将0x15再加上2。随后就可以计算出最后跳转到的地址: (0x15 + 0x2)*4 + 0x1BCC = 0x1C28。Ida反汇编后的结果也验证了结果是BEQ loc_1C28。

接下来我们想修改汇编代码为00001BCC: BNE loc_1C2C。只需要将”0A”变成”1A”,将”15”变成”16”即可。

0x0A代表BEQ,”15 00 00”代表跳转的相对地址,因为在arm中pc的值是当前指令的下两条(下一条的下一条)指令的地址,所以我们需要将0x15再加上2。随后就可以计算出最后跳转到的地址: (0x15 + 0x2)*4 + 0x1BCC = 0x1C28。Ida反汇编后的结果也验证了结果是BEQ loc_1C28。

接下来我们想修改汇编代码为00001BCC: BNE loc_1C2C。只需要将”0A”变成”1A”,将”15”变成”16”即可。

IDA来Patch android的so文件的更多相关文章

  1. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  2. Android so库文件的区节section修复代码分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78818917 一.Android so库文件的节表secion修复方案整理 1.简 ...

  3. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥

    偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...

  4. android 打开各种文件(setDataAndType)转:

    android 打开各种文件(setDataAndType) 博客分类: android-->非界面 android 打开各种文件 setDataAndType action动作  转自:htt ...

  5. 如何查看Android的Keystore文件的SHA1值

    像使用百度地图api时候,一般需要获取keystore的SHA1值,这里就手把手教大家如何查看Android的keystore文件中的SHA1值. 第一步: 打开cmd,切换到keystore所在的文 ...

  6. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  7. Android数据存储-文件操作

    一.预备知识 1.Android中的MVC设计模式 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计 ...

  8. 34.Android之资源文件res里drawable学习

    我们经常看到android工程资源文件res下drawable如ldpi.mdpi.hdpi.xhdpi.xxhdpi文件,今天我们学习了解下. (1)drawable-hdpi里面存放高分辨率的图片 ...

  9. android上传文件到服务器

    package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...

随机推荐

  1. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  2. 年度榜单:2013年最佳免费 PSD 设计素材揭晓

    <年度榜单>系列继续给大家带来2013年度发布的好东西,这篇文章要给大家分享的是本年度最佳的12套精美的 PSD 设计素材,你可以免费下载使用.这些免费素材不仅能帮助他们节省大量的时间,而 ...

  3. 使用elk+redis搭建nginx日志分析平台

    elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...

  4. WCF实现方法重载

    一.服务契约(包括回调契约)通过指定不同的OperationContract.Name来实现重载方法,当然代码部份还是必需符合C#的重载要求,即相同方法名称,不同的参数个数或参数类型 namespac ...

  5. Design Pattern: Not Just Mixin Pattern

    Brief 从Mix-In模式到Mixin模式,中文常用翻译为“混入/织入模式”.单纯从名字上看不到多少端倪,而通过采用Mixin模式的jQuery.extend我们是否可以认为Mixin模式就是深拷 ...

  6. LeetCode - Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  7. C# 各种字符串格式

    C#的String.Format举例 stringstr1 =); //result: 56,789.0 stringstr2 =); //result: 56,789.00 stringstr3 = ...

  8. UML类图画法及其之间关系

    1.泛化又名继承(Generalization),带空心箭头的实线表示,箭头指向父类 2.实现(Realization),带空心的虚线表示 3.关联(Association),类与类之间的关联,它使一 ...

  9. Verilog学习笔记设计和验证篇(四)...............状态机的置位与复位

    1)状态机的异步置位和复位 异步置位与复位是于时钟无关的.当异步置位或复位信号来临时,他们立即分别置触发器的输出为1或0,不需要等待时钟沿的到来.要将他们列入always块的事件控制信号内就能触发al ...

  10. 使用Spring的@Scheduled实现定时任务

    Spring配置文件xmlns加入xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation ...