逆向反汇编基础之二十五:超级简单算法逆,关键看清栈堆操作

这个CM的关键不在于算法 也不在于算法逆,而是在于认清特别是类似.NET下的程序

栈堆操作依赖性大于寄存器操作~

一个Key:

3210123

可在这串数字后面加任意多个非数字字符~

诸如: 3210123adawdadadffwf

或者是:3210123adawd545451545wadad

http://dl.dbank.com/c0uqanmpzm

逆向反汇编研究之二十四:这个CM很委婉

这个CM比较委婉,PHI写的…不知道啥时候养成的习惯~

就是在PHI写的程序遇到CALL的时候直接跳过观察栈堆和内存变化…

看见CALL不跟直接跳悲剧啊…

这个习惯不好  要多多跟进

当然不调试直接A是最好的结果

/***************************************/

一组可用Key:

ShadowKong

170034084450000

http://dl.dbank.com/c0yqbs6mzt

逆向反汇编基础之二十三:SEH(FS 0号)检测发现跟踪就悲剧

这个CM比较特别,加入了FS:[0]SEH检测OD跟踪的功能~

但是我们并不倡导跟踪和调试,要学会把握静态反汇编,所以这对我们无障碍

若真要跟踪,直接把SEH去掉便是~

/*****************************************************/

00401103   .  C705 08304000>mov     dword ptr [403008], 0040112C
0040110D   .  892D 04304000 mov     dword ptr [403004], ebp
00401113   .  68 00104000   push    00401000
00401118   .  64:FF35 00000>push    dword ptr fs:[0]
0040111F   .  8925 00304000 mov     dword ptr [403000], esp
00401125   .  64:8925 00000>mov     dword ptr fs:[0], esp
0040112C   .  64:8F05 00000>pop     dword ptr fs:[0]
00401133   .  83C4 04       add     esp, 4
00401136   .  C705 08304000>mov     dword ptr [403008], 0040116A
00401140   .  892D 04304000 mov     dword ptr [403004], ebp
00401146   .  68 00104000   push    00401000
0040114B   .  64:FF35 00000>push    dword ptr fs:[0]
00401152   .  8925 00304000 mov     dword ptr [403000], esp
00401158   .  64:8925 00000>mov     dword ptr fs:[0], esp
0040115F   .  33DB          xor     ebx, ebx
00401161   .  33D2          xor     edx, edx
00401163   .  B8 02000000   mov     eax, 2
00401168   .  F7F3          div     ebx
0040116A   .  64:8F05 00000>pop     dword ptr fs:[0]

/*****************************************************/

这个CM要注意,隐藏的规定Name长度

一组可以Key:

ShadowKong

b30101b8

http://dl.dbank.com/c0a5szasew

逆向反汇编基础之二十二:算法逆

今天这个CM主要的是算法逆向的问题…一段简单的算法代码:

/************************************************/

00401199   .  33C9          xor     ecx, ecx
0040119B   .  33DB          xor     ebx, ebx
0040119D   >  36:0FB69429 3>movzx   edx, byte ptr ss:[ecx+ebp-C4]
004011A6   .  03DA          add     ebx, edx
004011A8   .  6BDB 10       imul    ebx, ebx, 10
004011AB   .  41            inc     ecx
004011AC   .  3BC8          cmp     ecx, eax
004011AE   .^ 75 ED         jnz     short 0040119D
/************************************************/

其中eax==KeyLen

明显这个CM的验证格式是 f1(Name)==f2(Key);

写注册机的时候f1是非逆,所以f1(Name)的值很容易得到,写注册机的关键是逆f2();

这里的注册机只逆了当NameLen<=0x05的情况….

完美的注册机可以参考这注册机代码后再斟酌斟酌

一组可以Key:

Kong

=416530

注册机f2()逆完全是我个人推算出 和CM本身算法有点小区别

可以在Key前面加任何多个任何字符都OK~

http://dl.dbank.com/c0jglan3as

逆向反汇编基础之二十一:作者怎么做到的?居然把算法内嵌到API中?(原理已查明)

正如标题所言,这个CM仅次于之前的构造:

004xxx01  Call 004xxxx1

004xxx01  cmp EDI,0

004xxx01  JNZ offset[ 悲剧]

……..

……..

004xxxx1  XOR EDI EDI

004xxxx2  NOP

004xxxx3  RETN

机器码小关键CALL的CM,构造机器码的这个CM是迄今为止我觉得最有水平的 虽然可能这个CM的水平一般~但思路非常牛B

今天这个CM的关键算法位置居然是在API MessageBox的跳转过程中嵌入~怎么做到的??一般人肯定不会去跟一个对它非常熟悉的API

就像我第一次肯定不会去跟MessageBox一样..但重要部分恰恰在其中.非常希望能知道作者是怎么办到的~非常高明啊 佩服作者的思维和想法~

/*经过这几天的试验,其实实现这种方式很简单,这涉及API调用的高效和低效的问题

首先  高效的API调用一般都是:

CALL DWORD PTR [ FUNCTION OFFSER IN LAT]

低效的API调用一般是:

CALL  @F

@@:

JMP WORD PTR [FUNCTION OFFSET IN LAT]

如果在一个低效的API的JMP前加入算法CALL的话  这就可以实现类似这个CM的情况了~

理论上应该是这样子的 通过修改DASM绝对可以实现  但是通过MASM编程直接实现可能还要委婉一点~

.还最后要说的是 API调用的高效低效  还和约定调用方式有关*/

一组可用Key:

ShadowKong

16f267241d165BBC694a463A3802694A1a68105A

http://dl.dbank.com/c0qiw24o8e

逆向反汇编之二十:他的CODE的DASM能让人赏心悦目

今天这个CM非常漂亮!很多地方可圈可点啊~今天拿几个地方出来自我欣赏欣赏~

One:

00401390    55              push    ebp
00401391    8BEC            mov     ebp, esp
00401393    83C4 FC         add     esp, -4
00401396    60              pushad
00401397    C745 FC 0000000>mov     dword ptr [ebp-4], 0
0040139E    8B7D 08         mov     edi, dword ptr [ebp+8]
004013A1    FF45 FC         inc     dword ptr [ebp-4]
004013A4    47              inc     edi
004013A5    8A07            mov     al, byte ptr [edi]
004013A7    84C0            test    al, al
004013A9  ^ 75 F6           jnz     short 004013A1
004013AB    8B45 FC         mov     eax, dword ptr [ebp-4]           ; KeyLen
004013AE    F6D0            not     al
004013B0    04 0F           add     al, 0F
004013B2    75 5D           jnz     short 00401411                   ; 14个
004013B4    8B7D 08         mov     edi, dword ptr [ebp+8]
/*看下面这段,非常精彩的非明码确认字符
仔细阅读代码 你会发现其实就是在判断是否是’-‘(ASC为0x2D)
但是作者这种方法可谓非常巧妙~一眼看去还以为是啥重要算法=.=*/

继续阅读“逆向反汇编之二十:他的CODE的DASM能让人赏心悦目”

逆向反汇编基础之十九:完美编码算NameLen

今天的CM是控制台的呵呵~

也算是一种类型了,完全没有API调用(其实API调用也就是封掉了一些东西 或者说MS直接给个函数你用 而不用你自己Dim),虽然是用PHI写的,但估计用0x10Asm写的也这样差不多~

反汇编这类小CM要主意的是.找对关键算法CALL,此CM依然算法简单到鬼一样~

但是其中PHI控制台的编码结构能让人眼前一亮 如果你长时间和各种invoke打交道的话~

但是这不是我今天要说的,我今天要说的是比较底层(16位汇编)的编码取得NameLen(用户名长度)或者KenLen 或者各种Len的问题.

首先看下面一段小代码:

00405BE4  /$  89FA          mov     edx, edi
00405BE6  |.  89C7          mov     edi, eax
00405BE8  |.  B9 FFFFFFFF   mov     ecx, -1
00405BED  |.  32C0          xor     al, al
00405BEF  |.  F2:AE         repne   scas byte ptr es:[edi]
00405BF1  |.  B8 FEFFFFFF   mov     eax, -2
00405BF6  |.  29C8          sub     eax, ecx
00405BF8  |.  89D7          mov     edi, edx
00405BFA  \.  C3            retn

请把地址忽略只看中间0x00405BED到0x00405BDF1部分,如果你经常在您的程序中调用API 你就会知道 这个其实很简单,不就是GetDlgItemTextA/W的返回值么?对的 就是取这个返回值,我们看不用API的情况下是怎么取得的~就是这三句代码,运用搜索SCAS返回NameLen

可见这是逐个判断 然后JNE则+1的~这比直接调用API得到返回值更清晰细腻

知道这个有什么用?一般如果是crackme 而且是反汇编后看不到一大堆API调用的crackme,都会有关于计算这类Len的CALL

在大堆Call中识别出这类Call能帮助你更快速的找到关键算法Call 而没有必要一个一个Call跟进去..好了 就这小目的而已 适合我等菜~

一组可用Key:

ShadowKong

115

http://dl.dbank.com/c01tq7y8q3

逆向反汇编基础之十八:DDMM,一个简单的算法,适合各种菜

如标题,这个CRACKME非常简单…也非常适合我等熟悉反汇编,每日一CrackMe还是必须要做的工作~

呃 今天有点晚呢~

下次争取剪短时间完成!

用了内联反汇编还搞那么慢,实在非常~

一组可用Key:

ShadowKong

643062706f1b3

http://dl.dbank.com/c0kkfatx8v

逆向反汇编基础之十七:平安保险那小妞你秀逗了,乐了我一天

今天的CM还是一如既往的不难,适合各种练手~

还是一如既往的反汇编直接读写~

今天那平安保险的小妞给我打电话笑死哥了~

请问先生您生日多少呢?

呃`不想告诉你咋办?

#$@$10秒后 请问先生您的生日是多少呢?我们不会打听您的隐私~

呃`不能告诉你咋办?

@$@#$@20秒后 那请问先生您的生日多少呢?

呃~就不告诉你!

!@#@#30秒后 那先生你可以挂电话咯~

呃~靓妹你也可以挂电话了~

电话那头笑趴了~这头也趴了


一组可用KEY:

ShadowKong

ACA0-0193-DAF5-396F

http://dl.dbank.com/c0rfr9vb5q

.Net下IL ASM的HelloWorld

每当接触一种语言或者一个编程构架,无论在那一本书,那一个坛子的教程~

HelloWorld小程序都是开书或者开贴的第一印象~

YOUS 今天刚刚接触ILAsm 来个ILAsm 的HELLOWORLD,

从此,HelloWorld又多了一种写法…

/**********************************************************/

.assembly extern mscorlib{}
.assembly hello{}
.module hello.exe
.class public auto ansi class1 extends System.Object
{
.method public static void addTwoInts()
{
.entrypoint
ldstr “Hello ILAsm`s World!”
call void [mscorlib]System.Console::WriteLine(string)
nop
ret
}
}
/*保存为HELLO.IL 然后CMD (ILASM.EXE HELLO.IL)*/

/**********************************************************/


如果你是清风等.net高手,相信一眼遍明白所有指令…

话说ILASM也不错…

可惜我完全不会.NET编程(C# 版HelloWorld除外~)