跳至主要内容

博文

32位ARM汇编语言(四)数据处理指令

http://ift.tt/2Gwa4v5 基本指令介绍 数据传送指令 比较指令 cmp{条件}操作数1,操作数2 CMN{条件}操作数1,操作数2 TST{条件},操作数1,操作数2 TEQ{条件} 操作数1,操作数2 算数逻辑运算指令 ADD{条件}{S}目的寄存器,操作数1,操作数2 ADC{条件}{S}目的寄存器,操作数1,操作数2 RSB{条件}{S}目的寄存器,操作数1,操作数2 RSC{条件}{S}目的寄存器,操作数1,操作数2 AND{条件}{S}目的寄存器,操作数1,操作数2 EOR{条件}{S}目的寄存器,操作数1,操作数2 BIC{条件}{S}目的寄存器,操作数1,操作数2 基本指令介绍 数据传送指令 数据传送指令用于在寄存器和储存器中之间进行数据的双向传输 比如:MOV ,MVN 算数逻辑运算指令 完成常用的算术与逻辑运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中相应条件表示位 比如:ADD,ADC,SUB,SBC,RSB,RSC,AND,ORR,EOR,BIC 比较指令 不保存运算结果,只更新CPSR中相应的条件标志位 比如:CMP,CMN,TST,TEQ 数据传送指令 指令 描述 MOV{条件}{S}目的寄存器,操作数 数据传送指令 MVN{条件}{S}目的寄存器,操作数 数据取反传送指令 {S}选项决定指令的操作是否影响CPSR中条件标志位的值 MVN与MOV不同之处是在传送之前按位被取反 __asm__ ("mov ri,r0“); //将寄存器R0的值传送到寄存器R1 __asm__(”mov r1,r0,lsl#3"); //将寄存器R0的值左移3位后传到R1 __asm__(“mov pc,lr"); //将寄存器lr的值传送到pc,常用于子程序返回 __asm__("mvn r0,#0”); // 将立即数0 取反传送到寄存器R0中,完成后R0=-1 比较指令 指令 描述 CMP{条件}操作数1,操作数2 比较指令 CMN{条件}操作数1,操作数2 比较反值指令 TST{条件...

32位ARM汇编语言(二)ARM 汇编语言特点

http://ift.tt/2FpIH4w 两种不同风格的ARM指令 特点1:LDR/STR结构 特点2:8中寻址方式 特点3:指令后缀 特点4:条件执行后缀 特点5:多级指令流水线 两种不同风格的ARM指令 ARM 官方的ARM汇编指令:指令一般用大写,Windows中IDE开发环境常用,如 LDR RO,[R1] GNU风格的ARM汇编:指令一般用小写字母,linux中常用,如: ldr r0,[r1] 特点1:LDR/STR结构 ARM 采用RISC(Reduced Instruction Set Computer 中文:精简指令计算机)结构,cpu本身不能直接读取内存,需要先将内存中的内容加载到cpu中的通用寄存器中,而后才能被cpu处理 ldr(load register)指令将内存内容加载入通用寄存器 str(store register)指令将寄存器内容存入内存空间中 ldr/str组合用来实现ARM cpu和内存的数据交互 特点2:8中寻址方式 寻址方式 示例 寄存器寻址 mov r1,r2 立即寻址 mov r0,#0xff00 寄存器移位寻址 mov r0,r1,lsl#3 寄存器间接寻址 ldr r1,[r2] 基址变址寻址 ldr r1,[r2,#4] 多寄存器寻址 ldmia r1!,{r2-r7,r12} 堆栈寻址 stmfd sp!,{r2-r7,lr} 相对寻址 beq sign 特点3:指令后缀 虽然ARM的汇编指令不是很多,但是通常可以在指令后面跟上后缀,变成不同的指令,常用的指令有: 常用指令后缀 解释 B(byte) 功能不变,操作长度变为8位 H(half word) 功能不变,长度变为16位 S(signed) 功能不变,操作数变为有符号(如ldrsh,ldrsb) S(S标志) 功能不练,影响CPSR标志位,如(mov 和movs,movs r0,#0) 特点4:条件执行后缀 条件码 助记符 助记符全拼 说明 检测条件 0000 EQ equal 等于0 Z=1 0001 NE not equal...

32位ARM汇编语言(一)寄存器介绍

http://ift.tt/2EiY3sg ARM 基本约定 ARM处理器工作模式(7种) ARM寄存器 Abort Mode FIQ Mode IRQ Mode SVC Mode Undef Mode User Mode 小结 ARM 基本约定 Byte:8 bits Halfword: 16bits Word:32 bits 大部分的ARM core提供: - ARM 指令集(32-bit)(中断处理,需要32位) - Thumb指令集(16-bit)(最先推出的,每个指令16位) - Thumb2 指令集(16&32bit)(ARMv7时退出,混合指令) - ARM Thumb 互相可以转换 ARM处理器工作模式(7种) 7种工作模式: Mode 解释 User 非特权模式,大部分任务执行在这种模式 FIQ 当一个高优先级(fast)中断产生时将会进入这种模式(ARM的FIQ Signal被触发所产生的异常) IRQ 当一个低优先级(normal)中断产生时将会进入这种模式(ARM的IRQ Signal被触发所产生的异常 ) Supervisor 当复位或软中断指令执行时将会进入这种模式 Abort 当存取异常时将会进入这种模式(也就是读取内存异常) Undef 当执行未定义指令时进入这种模式 System 使用和User模式相同寄存器集的特权模式 注意: 1:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式) 2:Privilege中除Sys模式外,其余5种为异常模式 3:各种模式的切换,可以是普通程序员通过代码主动切换(通过写cpsr寄存器);也可以是CPU在某些情况下自动切换 4:各种模式下权限和可以访问的寄存器不同 ARM寄存器 ARM 寄存器一共有37个32位寄存器 其中,30个为”通用“寄存器,r1-r14 未分组的寄存器:r1-r7,只有一个寄存器 分组的寄存器: r8-r14:有多个同名寄存器 r8-r12:两个 r13-r14:6个 r13(sp),R14(lr) 一个固定的程序计数器:pc(又称r15),也...

安卓CTF cake.apk解题

http://ift.tt/2DENrGZ 题目基本信息 大小: 1685975 bytes 修改时间: 2018年1月25日, 12:03:47 MD5: EBA6C33907783F8D24313AF3C1329598 SHA1: DD6821B9F91282325C87FD51220896168AAA3935 CRC32: A1CF79DC cake.apk解压密码: nvai 安装运行画面 很明显这是一道解密题,二话不说开始分析吧 分析 拖到安卓killer中,注册文件没有发现有什么特别的 只知道主模块是 .M 在主模块中的 onCreate 函数中,发现 实在 a 这个了类中有点击事件的监听器,那么进去看 onClick 函数倒地做了什么 整个a函数是非常简单的,就一个点击相应函数,这里比较关注的是 check 函数,实在主类中,进去查看一下 大体的逻辑是,先通过getkey,获取一个字符串保存到str1中,本来getkey返回的字符串是这样的 但是注意了,这里是方法的名称是 getKey 但是 str1= get□ey 非常的具有迷惑力 实例返回的字符串应该是这个 从图片上也可以看到,对数组进行了赋值,赋值完之后的数组为 int tem[16] = { 0, 3, 13, 19, 85, 5, 15, 78, 22, 7, 7, 68, 14, 5, 15, 42 }; 紧接着就是对字符串进行校对,可以看到整个程序中没有返回值,如果发生了错误,都会调到自定义的错误 localException1 进行处理 通过观察可以得知数组中每个元素和字符串的关系为 密码[i]^str[i%8]=整型数组[i] 因此写过控制台程序进行输出 计算解密 int tem[16] = { 0, 3, 13, 19, 85, 5, 15, 78, 22, 7, 7, 68, 14, 5, 15, 42 }; char temchar[] = "bobdylan"; for (int i = 0; i < 16; i++) { char c = tem[i] ^ temchar[(i % 8)]; printf("%c...

Android病毒分析之《秒抢红包apk》

http://ift.tt/2E6mnxp 病毒信息 恶意行为 病毒执行 病毒分析 总结 病毒信息 大小: 251271 bytes 修改时间: 2016年4月15日, 23:37:26 MD5: 033AE1BA78676130E99ACC8D9F853124 SHA1: B43F731C59FF37602CB9F971F893965EF19C9DEE CRC32: AAC480FC 恶意行为 修改锁屏画面 修改锁屏密码 监控输入密码尝试次数 开机自启恶意画面 激活设备管理器 对解密进行勒索 病毒执行 首先安装好病毒之后,病毒向用户申请权限 通过图片可以看到,申请的权限有 - 清楚所有数据 - 更改屏幕锁屏密码 - 更改密码 - 检视屏幕解锁尝试次数 - 锁定屏幕 加入用户点击激活之后,就会发生下面的情况 病毒分析 首先看注册文件 通过图片可以发现,这个广播中有一个 DEVICE_ADMIN_ENABLED 权限,这是服务的类是 MyAdmin ,这个类被用过很多次了,感觉网上很多病毒代码都是搜索一下拼凑的。。。同时上面还有一个开机自启的权限 进去 MyAdmin 这个类中,可以发现有又给很明显的onPasswordChanged函数,这个很明显的就可以看到的是密码是 8985 ,经过试验,是可以用这个密码解开重启之后的手机的,并且手动关闭设备管理器之后,是可以把这个程序卸载掉的 但是卸载掉之后发现,重启手机仍旧是可以看到锁的 因此我们需要换个思路,这样可能不行,需要把上面图片描述页面的密码找出来,因为那个界面有监控数据,找起来应该有点麻烦 在 DU 这个类中,发现了 DES 进行加密解密的函数 当用户点击验证密码的时候,肯定会对保存的加密密码进行解密,然后进行比较,干脆直接在这里加一个日志Log,输出一下解密信息 通过回编译生成之后重新安装,使用 adb logcat 进行日志过滤 发现密码为 00000000 ,输入之后果然进行正常的进行解锁了 总结 这个病毒主要利用的是人的贪欲,如果用户不下载非官网的APP,在app进行权限申请的时候多留个心眼,多想想,可能就不会遭到病毒的攻击 The post Android病毒分析之《秒抢红包apk》 appear...

Android病毒分析之《王者荣耀刷皮肤》

http://ift.tt/2G9wJ0d 病毒信息 病毒行为 使用工具 病毒执行 病毒分析 卸载应用 病毒信息 大小: 261080 bytes 修改时间: 2016年3月19日, 22:57:58 MD5: CB9E3C9C5CDED91F96AA9662BA150DB8 SHA1: 3852A0324A1B57B23DE15A6D5298E61BF4C087E2 CRC32: D4DA0CB5 病毒行为 获取锁屏权限 设置设备管理器权限 获取修改屏幕密码的权限 使用工具 AndroidKiller jeb2.2.7 病毒执行 打开软件,点击立即使用之后,会让进行权限选择,不激活就提示不激活的话不能使用全部功能 这里看获取的权限是 更改屏幕锁屏密码 和 锁定屏幕 点击激活之后黑屏,退出之后发现屏幕被锁,并设有勒索信息 病毒分析 首先分析注册文件发现了了一个服务,这个服务中有 DEVICE_ADMIN_ENABLED 权限 这个 DEVICE_ADMIN_ENABLED 权限主要是使用了 DevicePolicyManager 这个类,其可以实现实现屏幕锁定、屏幕亮度调节、出厂设置等功能。如果这个设备管理器激活成功的话,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法。因此去查看 MyAdmin 这个服务的 onEnable 方法就是最主要的 查看onEnable函数,发现了一个方法, getSharedPreferences 这个方法,这个方法可以获取以xml文件保存的键值对,而且这个保存键值对的xml文件,必须保存在 data/data/包名/shared_prefs 这个目录下 但是进去这个路径之后,发现目录下并没有这个文件夹 也就是说明其实获取的空的,但是后面又想通过 getString 这个方法获取xml实例中的“test"的字符串,但是其实是没有的,str只能等于6699了 同时通过图片可以看到,下面有 lockNow 函数和 resetPassword 函数,见名知意,同时 resetPassword 的参数是str,也就是说锁屏的密码其实是6699 卸载应用 虽然有了密码可以进去了,但是...