Reverse
1.Transformation:考unicode
载下来的档案,看起来编码错误
用unicode线上编辑器转成16进制
再丢进来从16进制转到ASCII
2.ARMssembly 0
IDA pro
搜寻IDA pro后载想要安装版本,这边用linux
chmod +x idafree77_linux.run #要先修改权限,再执行sudo ./idafree77_linux.runsudo ln -s /opt/idafree-7.7/ida64 /usr/bin #建立实体连结ida64 #执行
结果发现档案格式不对,只能硬干惹
PE是微软的一种执行档的资料形式 不是副档名
直接看fun1后知道是比大小,输出较大的数
再把比较大的数变成16进位得到flag
ARM
暂存器
SP, the Stack Pointer,R13:用来当作active stack的指标
LR, the Link Register,R14:用来当存子程式的return address
运算
add:加,如:add r1, r2 ==>r1 = r1 + r2
add r1, r2, #1 ==>r1 = r2 + 1
sub:减,如:sub r1, r2==>r1 = r1 - r2
sub r1, r2, #1 ==>r1 = r2 - 1
CMP:比较,比较方式也是同sub,用减的来比较,但不影响减数及被减数。
LDR(load (to) Register):从记忆体位址载入资料到单一暂存器,
如:LDR R1, [R0] #R1 = *R0,从位址 R0 载入到 R1暂存器
LDR R0, [R1], #8 // R0 = *R1 then R1 = R1 + 8
STR(store (from) Register):从单一暂存器的值存回记忆体,
如:STR R1, [R0] # *R0 = R1, 把 R1 暂存器写到位址 R0
STR R0, [R1], #-8 // *R1 = R0 then R1 = R1 - 8
bls:Branch if Lower or the Same,当小于等于时,跳转(jump)
b :b addr L ==> pc = addr无条件跳转。
3.keygenme-py
看一下程式码,很明显这有flag,但有缺
循着 "key_full_template_trial"搜寻,看到这段很可疑,一看就知道是上面的XXXX
跑一下程式后就找到flag的一部分,加上原本的就解完啦