首页
社区
课程
招聘
[原创]基于ARM平台下的WINDOWS RT的PE文件逆向初步研究
发表于: 2013-8-7 21:27 8620

[原创]基于ARM平台下的WINDOWS RT的PE文件逆向初步研究

2013-8-7 21:27
8620

今天立秋。秋天来了,冬天还会远吗?
最近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点造成,这个地址,很可能不是我想修改的地址。
最后祝大家秋天快乐


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (5)
雪    币: 67
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这应该是看雪第一个逆向RT版的!
2013-8-7 22:02
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好吧,我承认我只卡过RT的图片,楼主牛人
2013-8-7 23:23
0
雪    币: 37
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
RT是彻底的没有接触啊!楼主牛逼
2013-8-8 11:36
0
雪    币: 245
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主分享
2013-8-8 23:31
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
程序无法执行,没有任何反应
一键越狱工具:http://forum.xda-developers.com/showthread.php?t=2092158
各种arm软件:http://forum.xda-developers.com/showthread.php?t=2092348

windows8对系统相关文件都会验证数字签名,比如explorer.exe,这种文件自身带有签名的程序被修改就会提示无法验证文件签名,无法执行。notepad.exe这种文件自身不带签名的程序(签名在cat里)就不会有任何提示,无法执行。

在关闭Secure Boot的情况下,可以修改bootmgr-ntoskrnl.exe-winload.exe-ci.dll,最终让windows不验证数字签名

前段时间我在尝试反越狱,就是让windows验证所有文件的签名达到白名单效果,但是内核调试修改比起用ollydbg修改难多了,所以放弃了,本质是修改SeGetImageRequiredSigningLevel这个函数

windows8开始系统越来越坚固了,估计在未来,除了0day没什么病毒了
2013-8-10 15:42
0
游客
登录 | 注册 方可回帖
返回
//