首页
社区
课程
招聘
[旧帖] [讨论]谁有时间给评个分 0.00雪花
发表于: 2007-11-25 15:45 2919

[旧帖] [讨论]谁有时间给评个分 0.00雪花

2007-11-25 15:45
2919
第一次做反汇编:
这是一个简单加密算法的C代码还原
谁有闲功夫就帮我看看,这程序以经通过编译运行了,大家看看可以不可以再好一些:

这个是汇编码:
004012F6 PUSH Key4.0040303F ; String = “Eldad Eilam”
004012FB CALL <JMP.&KERNEL32.lstrlenA> ; lstrlenA
00401300 XOR ESI,ESI
00401302 XOR EBX,EBX
00401304 MOV ECX,EAX
00401306 MOV EAX,1
0040130B MOV EBX,DWORD PTR [40303F]
00401311 MOVSX EDX,BYTE PTR [EAX+40351F] ;1+40351F的变量在调器中可以看到是0x25
00401318 SUB EBX,EDX                      ;2+40351F的变量是0x65
0040131A IMUL EBX,EDX
0040131D MOV ESI,EBX
0040131F SUB EBX,EAX
00401321 ADD EBX,4353543
00401327 ADD ESI,EBX
00401329 XOR ESI,EDX
0040132B MOV EAX,4
00401330 DEC ECX
00401331 JNZ SHORT Key4.0040130B

下面的是半成品
#include "stdio.h"
#include "windows.h"
ULONG ComputeSerial(char* pszString)
{
DWORD dwLen = lstrlen(pszString);
        _asm
        {
                mov ecx, [dwLen]
                mov edx, 0x25
                mov eax, 1
                LoopStart:
                MOV EBX, DWORD PTR [pszString]
                mov ebx, dword ptr [ebx]
                //MOVSX EDX, BYTE PTR DS:[EAX+40351F]
                SUB EBX, EDX
                IMUL EBX, EDX
                MOV ESI, EBX
                SUB EBX, EAX
                ADD EBX, 0x4353543
                ADD ESI, EBX
                XOR ESI, EDX
                MOV EAX, 4
                mov edx, 0x65
                DEC ECX
                JNZ LoopStart
                mov eax, ESI
        }
}
以上教程上做好的,下面是我做的
这个是还原完成的C代码
int main()
{
        char string[]= {"12345678"};
        printf ("Welcome to the KeygenMe-3 keygen!\n");
        printf ("User name is: %s\n", string);
        printf ("Serial number is: %u\n", ComputeSerial(string));
        return 0;
}

#include "stdio.h"
#include "windows.h"
ULONG ComputeSerial(char *string)
        {
                ULONG tempreg = 0 ,tempeax,Iret = 0,localID;
                int counter;
               
                counter = strlen(string);
                localID = 0x25;
                tempeax = 1;
                do{
                memcpy(&tempreg,string,4);               
                tempreg = (tempreg-localID)*localID;
                Iret=tempreg;
                tempreg = ((tempreg-tempeax)+0x4353543);
                Iret = (Iret+tempreg)^localID;
                tempeax = 4;
                localID = 0x65;
                counter--;
                }while(counter != 0);
                return Iret;
        }

int main()
{
        char  array[]={"12345678"}; // 算法要输入的数据(用户之类)
        printf ("Welcome to the KeygenMe-3 keygen!\n");
        printf ("User name is: %s\n",array);
        printf("%u\n",ComputeSerial(array));
   return 0;
}
其实这个算法本来是不用译成C代码的,内连汇编之后,就已经可以使用了。我逆向他的目的是想仔细理解一下加密算法。逆向加密算法要比正常程序代码复杂一点。比如说在程序算法中,大部份情下我都可以
省略寄存器,不把他当做变量。而这个程序好象没办法做到这一点。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
004012F6 PUSH Key4.0040303F ; String = “Eldad Eilam”
004012FB CALL <JMP.&KERNEL32.lstrlenA> ; lstrlenA
00401300 XOR ESI,ESI
00401302 XOR EBX,EBX
00401304 MOV ECX,EAX                                    ;循环计数 次数为String 长度
00401306 MOV EAX,1
0040130B MOV EBX,DWORD PTR [40303F]        ;EBX取String(S)
00401311 MOVSX EDX,BYTE PTR [EAX+40351F];EDX 依次取字符串Z[i](i=1或4)
00401318 SUB EBX,EDX                                     ;(S-Z[i])*Z[i]=X[i]
0040131A IMUL EBX,EDX                                 
0040131D MOV ESI,EBX                                    
0040131F SUB EBX,EAX                                    (X[i]-1+0x4353543+X[i])^Z[i]
00401321 ADD EBX,4353543                             (X[i]-4+0x4353543+X[i])^Z[i]
00401327 ADD ESI,EBX
00401329 XOR ESI,EDX
0040132B MOV EAX,4
00401330 DEC ECX
00401331 JNZ SHORT Key4.0040130B
怎么感觉 算法不完善?是不是我看的有问题
[40351F]放张表更好吧
0040130B MOV EBX,DWORD PTR [40303F]改成
0040130B MOVSX EBX,DWORD PTR [EAX+40303F-1]
0040132B MOV EAX,4改成0040132B ADD EAX,4
2007-11-25 19:58
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢 阿南
不惜时间帮我看这段代码,我当时也想用数组了,但因为一时的懒惰.所以就直接把那两个数.用常量来表示了.说的逆向算法就是应该按代码原样译.
2007-11-28 17:32
0
雪    币: 213
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
很好,新兵论坛很需要这种浅显易懂的东西.
2007-11-28 19:23
0
游客
登录 | 注册 方可回帖
返回
//