把逆向丢了有一段时间了,总觉得有些东西应该坚持研究下去。最近一年在做移动项目的时候一直都想把整个android底层了解清楚。

直到最近有点时间空余下来。一段时间后发现android的芯片ARM的ARM汇编和x86的16,32位汇编其实原理是相通的,只是可能在语法 在硬件结构上会导致有差别。(虽然这篇文章并用不到这种东西),而相比于android的Dalvik虚拟机代码,Dalvik机器码更便于阅读。只要好好记住Dalvik的一些规则便可。

然后我们从简单的逆向开始吧。这篇我会拿一个有广告的android应用来试手,当然原理本身非常简单,当然并没有针对的意思,下面是一个简单的使用逆向技术而修改程序的过程:

使用到的工具:IDA,C32ASM,JD-gui,Notepat++,apktool,android签名工具。

需要做手术的应用:某事百科。

继续阅读

毕业两个月了,工作了三个月后。。

最终一切又回归到了原点。

选择了一个节奏快的城市

每天都活在奔跑中。。

很多时候其实挺喜欢这种感觉

好久没去反汇编了。。看到OD代码页的感觉真棒。

果然还是汇编比较有亲和力。。。

一组Key:

ShadowKong

5BDDCC8C

CM

今天碰到C3和老黑大牛的CM  闷了一天  PHI编程没经验

对PHI构架不熟悉  被一个灰色的按钮顶住了 哎…

果然还是要去研究下PHI编程吗?

为不间断CM  随手找了一个  结果是个菜鸟级别的..

Down

晕啊..碰到一个考数学的…

004013EE  |> \DD45 F8       fld     qword ptr [ebp-8]
004013F1  |.  D9FE          fsin
004013F3  |.  DD5D A8       fstp    qword ptr [ebp-58]
004013F6  |.  DD45 F0       fld     qword ptr [ebp-10]
004013F9  |.  D9FE          fsin
004013FB  |.  DD5D A0       fstp    qword ptr [ebp-60]
004013FE  |.  DD45 A8       fld     qword ptr [ebp-58]
00401401  |.  DC4D A0       fmul    qword ptr [ebp-60]               ;  sin*sin
00401404  |.  DF2D 30304000 fild    qword ptr [403030]
0040140A  |.  DEC9          fmulp   st(1), st                        ;  *
0040140C  |.  83EC 08       sub     esp, 8
0040140F  |.  DD1C24        fstp    qword ptr [esp]
00401412  |.  E8 D1000000   call    <jmp.&CRTDLL.floor>
00401417  |.  83C4 08       add     esp, 8
0040141A  |.  DD5D 98       fstp    qword ptr [ebp-68]
0040141D  |.  D9EE          fldz                                     ;  将0.0装入st(0)
0040141F  |.  DC5D 98       fcomp   qword ptr [ebp-68]
00401422  |.  DFE0          fstsw   ax
00401424  |.  9E            sahf
00401425      75 05         jnz     short 0040142C
上面关键算法

继续阅读

对下面的指令先做一些说明:
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) – st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1.  数据传递和对常量的操作指令

继续阅读

指令格式 指令含义 执行的操作
FLD src 装入实数到st(0) st(0) <- src (mem32/mem64/mem80)
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
FBLD src 装入BCD数到st(0) st(0) <- src (mem80)
FLDZ 将0.0装入st(0) st(0) <- 0.0
FLD1 将1.0装入st(0) st(0) <- 1.0
FLDPI 将pi装入st(0) st(0) <- ?(ie, pi)
FLDL2T 将log2(10)装入st(0) st(0) <- log2(10)
FLDL2E 将log2(e)装入st(0) st(0) <- log2(e)
FLDLG2 将log10(2)装入st(0) st(0) <- log10(2)
FLDLN2 将loge(2)装入st(0) st(0) <- loge(2)