【Android 逆向】ARM while 逆向
#include <stdio.h>
int dowhile(int n){
int i = 1;
int s = 0;
do{
s += i;
}while(i++ < n);
return s;
}
int whiledo(int n){
int i = 1;
int s = 0;
while(i <= n){
s += i++;
}
return s;
}
int main(int argc, char* argv[]){
printf("dowhile:%d\n", dowhile(100));
printf("while:%d\n", whiledo(100));
return 0;
}
.text:00008570 ; =============== S U B R O U T I N E =======================================
.text:00008570
.text:00008570
.text:00008570 doWhile ; CODE XREF: main+8↓p
.text:00008570 ; __unwind {
.text:00008570 MOV R2, #0
.text:00008574 MOV R3, #1 ; i = 1 s=0
.text:00008578
.text:00008578 loc_8578 ; CODE XREF: doWhile+18↓j
.text:00008578 ADD R2, R2, R3 ; s = s + i
.text:0000857C ADD R3, R3, #1 ; i++
.text:00008580 SUB R1, R3, #1 ; tmp = i -1
.text:00008584 CMP R0, R1
.text:00008588 BGT loc_8578 ; if arg0(n) > tmp continue继续循环
.text:0000858C MOV R0, R2 ; r0 为return值 r0 = s
.text:00008590 BX LR ; 使用LR的值跳转出函数
.text:00008590 ; } // starts at 8570
.text:00008590 ; End of function doWhile
.text:00008590
.text:00008594
.text:00008594 ; =============== S U B R O U T I N E =======================================
.text:00008594
.text:00008594
.text:00008594 whileDo ; CODE XREF: main+20↓p
.text:00008594 ; __unwind {
.text:00008594 SUBS R2, R0, #0
.text:00008598 MOVLE R0, #0
.text:0000859C BXLE LR ; if n <= 0 跳出函数
.text:000085A0 MOV R0, #0 ; s = 0
.text:000085A4 MOV R3, #1 ; i = 1
.text:000085A8
.text:000085A8 loc_85A8 ; CODE XREF: whileDo+20↓j
.text:000085A8 ADD R0, R0, R3 ; s += i
.text:000085AC ADD R3, R3, #1 ; i++
.text:000085B0 CMP R2, R3
.text:000085B4 BGE loc_85A8 ; if n >= i contiue
.text:000085B8 BX LR
.text:000085B8 ; } // starts at 8594
.text:000085B8 ; End of function whileDo
.text:000085B8
.text:000085BC
.text:000085BC ; =============== S U B R O U T I N E =======================================
.text:000085BC
.text:000085BC
.text:000085BC ;
.text:000085BC
.text:000085BC ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:000085BC main ; CODE XREF: j_main↑j
.text:000085BC ; __unwind {
.text:000085BC PUSH {R4,LR} ; 栈上保存R4 和 LR 的值
.text:000085C0 MOV R0, #0x64 ; 'd' ; 为RO 赋值100
.text:000085C4 BL doWhile ; 跳转到doWhile。同时给LR赋值为0x85C8
.text:000085C8 MOV R1, R0
.text:000085CC LDR R0, =(aDowhileD - 0x85D8) ; 获取字符串在GOT的偏移
.text:000085D0 ADD R0, PC, R0 ; 获取字符串实际首地址
.text:000085D4 BL printf
.text:000085D8 MOV R0, #0x64 ; 'd' ; 为R0 赋值100
.text:000085DC BL whileDo ; 跳转到doWhile。同时给LR赋值为0x85E0
.text:000085E0 MOV R1, R0
.text:000085E4 LDR R0, =(aWhileD - 0x85F0) ; "while:%d\n"
.text:000085E8 ADD R0, PC, R0 ; "while:%d\n"
.text:000085EC BL printf
.text:000085F0 MOV R0, #0
.text:000085F4 POP {R4,PC}
.text:000085F4 ; End of function main
.text:000085F4
.text:000085F4 ; -----
【Android 逆向】ARM while 逆向的更多相关文章
- 使用IDA pro逆向ARM M系核心的Bin固件
使用IDA pro逆向ARM M系核心的Bin固件 物联网和智能设备这两年还是比较火的,我们的手中或多或少都有了几个智能设备,比如手环,智能手表,或者门锁什么之类的东西,但是同学们在做逆向的时候, ...
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础
20145219<网络对抗技术>PC平台逆向破解之逆向与Bof基础 实践目标 实践对象:一个名为pwn1的linux可执行文件. pwn1正常执行流程:main调用foo函数,foo函数会 ...
- 【android逆向】 ARM for 逆向
C源码 #include <stdio.h> int nums[5] = {1, 2, 3, 4, 5}; int for1(int n){ //普通for循环 int i = 0; in ...
- 【Android 逆向】ARM switch 逆向
#include <stdio.h> int switch1(int a, int b, int i){ switch (i){ case 1: return a + b; break; ...
- 一些Android程序的反逆向方法
1.检测调试器 在代码中检测调试器的动态调试 首先在AndroidMainfest.xml文件中设置android:debuggable="false",让程序不可调试.这样别人想 ...
- [Android Security] Smali和逆向分析
copy : https://blog.csdn.net/u012573920/article/details/44034397 1.Smali简介 Smali是Dalvik的寄存器语言,它与Java ...
- 【逆向工具】逆向工具101editor使用-游戏快速通关
[渡者游戏简介] 船夫小江将运送客人的,羊.狐狸.草等物品过河,如果留下动物被其它种类吃掉任务就失败了.你需要帮助他做出正确的顺序选择.Ferryman是一款根据经典谜题改编的解谜游戏. 一.查看文件 ...
随机推荐
- cve-2021-42287和cve-2021-42278漏洞复现
一.漏洞概述 cve-2021-42287 : 由于Active Directory没有对域中计算机与服务器账号进行验证,经过身份验证的攻击 者利用该漏洞绕过完全限制,可将域中普通用户权限提升为域管理 ...
- 使用Playbook批量部署多台LAMP环境
1. 安装ansible yum install epel-release -y yum install ansible -y Playbook是一个不同于使用ansible命令行执行方式的模式,功能 ...
- Android高仿网易云音乐-启动界面实现和动态权限处理
效果 实现分析 基本上没有什么难点,就是布局,然后显示用户协议对话框,动态处理权限,判断是否显示引导界面,是否显示广告界面等. 布局 <?xml version="1.0" ...
- 选择结构-单if语句和标准if else语句
判断语句1--if if语句第一种格式: if if(关系表达式){ 语句体; } 执行流程 首先判断关系表达式看其结果是true还是false 如果是true就执行语句体 如果是false就不执行语 ...
- 记录自己NVIDIA GeForce MX250迷之安装cuda+pytorch成功了
电脑是ubuntu20.4 Pop!_OS 20.04 LTS MX250显卡并没有列在CUDA支持的GPU里 希望文中链接的别人的博客不会消失掉. 安装了英伟达的驱动 参考了这一篇:Ubuntu 安 ...
- Mark IntelliJ IDEA 2018.2.3破解
来源:https://blog.csdn.net/qq_38060935/article/details/90377761
- java的elasticsearch做高亮显示
import org.apache.commons.lang3.reflect.FieldUtils;import org.elasticsearch.action.search.SearchResp ...
- Visual Studio 生产环境配置方案:SlowCheetah
原文 SlowCheetah 能满足你不同编译模式产生不同 app.config 配置的需求,已被微软纳入麾下,支持XML,JSON格式. 下面我们用XML的格式来试试如何使用SlowCheetah, ...
- 007面试题__==和equals的区别
常见面试题03: 问:==和equals的区别 1)对于基本类型而言,比较的是数值是否相等 对于引用类型而言,比较的是内存地址是否相等 2)equals:比较的是两个对象的内容是否相等
- 五分钟给你的 gRPC服务 加上 HTTP 接口
gRPC 服务要加 HTTP 接口? go-zero 给大家带来极简的 RESTful 和 gRPC 服务开发体验的同时,社区又给我们提出了新的期望: 我想只写一次代码 既要 gRPC 接口 也要 H ...