-
-
[原创]基于ARM平台下的WINDOWS RT的PE文件逆向初步研究
-
-
[原创]基于ARM平台下的WINDOWS RT的PE文件逆向初步研究
今天立秋。秋天来了,冬天还会远吗?
最近SURFACE RT降价,跌破了2000大关,还不知道什么是平板的我,也就买了一台。因此。闲来无事也就分析分析上面的小程序。
由于本人太笨,没有越狱成功。所以系统上还不能运行修改后的程序,并且这个平台上也没有OD那么强大的调试器。因此只能用本办法。IDA一点一点看。。
想逆向,必须先了解ARM的知识,初学ARM指令2天的我,整理了一下。定有很多错误,只供参考
第一部分 寄存器
通用寄存器
16个通用寄存器 R0-R15
4个参数 a1-a4 R0-R3
8个变量寄存器 V1-V8 R4-R11
静态地址 SB R9
堆栈限制 SL R10
帧指针 FP R11
中间临时寄存器 IP R12
堆栈指针 SP R13
连接寄存器 LR R14
程序寄存器 PC R15 EIP
状态寄存器
CPSR
SPSR
浮点数寄存器
F0-F7(FPA寄存器)
SO-S7(CFP单精度寄存器)
D0-D7(VFP双精度寄存器)
最重要的还是第二部分,指令
mov R1,R2
mvn R1,R2 ;MOV R1,R2 NOT,R1 mvn=mov+not
sub R0,R1,R2 ;R0=R1-R2
rsb R0,R1,R2 逆向减法指令 ;R0=R2-R1
SBC 带进位的SUB
RSC 带进位的RSB
mov R0,#4000H 立即数前缀要加# MOV R0,4000H
mov R1,R2,lsl #2 r0=r2*4 先左移 再赋值 SHL R2,2 MOV R1,R2
LSL 逻辑左移 ;SHL
LSR 逻辑右移 ;SHR
ASR 算数右移 ;SAR
ROR 循环右移 ;ROR
LDR R1,[R2] ;MOV R1,[R2]
SWP R1,R1,[R2] ;XCHG R1,[R2]
LDR R2,[R3,#0F] ;mov R2,[R3+0f] 后面给前面 内存到寄存器
STR R2,[R3,#0F] ;mov [R3+0f],R2 前面给后面 寄存器到内存
ORR ;OR
EOR ;XOR
AND ;AND
BIC R1,R1,#7 ;AND R1,(NOT 7) (清0指令)
CMN R1,R2 ;CMP (NOT) CMP R1,(NOT R2) 判断R1是否为R2的补码
TST R1, #7 ;判断最低3位是否为0
ADD,R1,R1,R1,LSL#2 ;R1=R1+R1*2^2; (R1=R1*5)
SUB,R1,R1,R2,LSL#2 ;R1=R1-R2*2^2;
MUL,R1,R2,R3 ;R1=R2*R3
MLA R1,R2,R3,R4 ;R1=R2*R3+R4(乘加指令);
UMULL R1,R2,R3,R5 ;(R2,R1)=R5*R8; SMULL 64位无符号乘法指令 R2高32位,R1低32位
SMLAL R2,R3,R7,R6 ;(R3,R2)=R7*R6+(R3,R2) SMLAL 64位有符号乘加指令
条件码
EQ 相等
NE 不相等
MI 负数
PL 自然数
VS 溢出
VC 没有溢出
CS/HS 无符号大于等于
CC/LO 无符号小于
HI 无符号大于
LS 无符号小于等于
GE 有符号大于等于
LT 有符号小于
GT 有符号大于
LE 有符号小于等于
比较R1和R2 如果R1大,RO=0X40 ,如果R1小,R0=0X80
CMP R1,R2
ADDHI R0,0X40
ADDLT R0,0X80
跳转指令
B 00401000 JMP 00401000
BL 401000 CALL 401000
BX R0 JMP R0 (如果RO奇数 目标代码为Thumb(16位),如果R0是偶数,目标代码为ARM(32位))
块拷贝指令
STMIA R0!,{R1-R7} 向上增长 赋值前不加1
STIMB 向上增长 复制前加1
STMDA 向下增长 赋值前不加1
STMDB 向下增长 复制前加1
I(INC) +
D (DEC) -
A 操作后加地址
B 先加地址后操作
其次 就是了解PE知识,这个大家应该已经很熟悉了。
累了吗?休息一会10分钟。(可以想想5 16 24 72 48 120 ?)
我们继续
拿什么软件做目标呢?就拿notepad.exe吧
我们经常会发现这样的事情,电脑关机忘了保存正在编辑的文本,我们让他在编辑已经存在并且未保存的时候,关机自动保存。
为什么用这个程序呢?首先,他比较经典。
其次,对于像我这样粗心大意的人来说,修改一下确实有一些用处。(比如我自己,多次因为notepad.exe未保存丢失文件,危害最严重的一次是高考报志愿时候因为第一天选好的学校未保存,第二天着急选择了别的学校。从而错过了3本而读了大专)
当程序关闭的时候,会弹出来一个窗口,保存,不保存,取消。他们的返回值分别是
保存:6
不保存:7
取消:2
我们的任务就是把这个值恒为6就可以。
其实很简单,但是由于没有像OD那么强大的调试器,所以只能用IDA慢慢看,并且我的机器没有越。不能验证修改后的文件,所以可能我的修改是错误的,希望理解)
经过1个多小时的分析,我猜测地址应该是 004071F8这里
opcode asm
FEF73AFB BL SUB_405870
再申明一下,1 本人技术不高。2没有调试器 3本人设备没有越狱。
这3点造成,这个地址,很可能不是我想修改的地址。
最后祝大家秋天快乐
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)