首页
社区
课程
招聘
[讨论]反逆向学习(1)
2008-8-26 15:16 18106

[讨论]反逆向学习(1)

2008-8-26 15:16
18106
收藏
点赞7
打赏
分享
最新回复 (30)
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
expmonking 2008-8-28 22:19
26
0
来晚了
我也做了一个

#include <windows.h>
#include <stdio.h>
void main()
{
        char* str="hello world\n";

        _asm        ret
        memset(str+1, 00, 3);       

        MessageBoxA(0,str,0,0);
}
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
expmonking 2008-8-28 22:25
27
0
太马虎了 精简了一下

#include <windows.h>
#include <stdio.h>
void main()
{
  char* str="hello world\n";
  memset(str+1, 00, 3);  
  MessageBoxA(0,str,0,0);
}
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
expmonking 2008-8-28 22:46
28
0
上面的改动了“hello world”的内容(虽然要求没说不可以 ),再次改进了一下,呵呵,这次没有改动“hello world”的内容,且ida里不显示“hello world”

#include <windows.h>
#include <stdio.h>
void main()
{
        char* str="hello world\n";       
        memset(str+1, 0x65, 3);
        memset(str+2, 0x6c, 2);       
        MessageBoxA(0,str,0,0);
}
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2008-8-29 09:35
29
0
昨天在网吧看到了harass的这个小游戏。回去也写了一段垃圾代码。

水平有限,欢迎鄙视。。

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.const
temp dd 1234
szText db 'Hello World!',0

.code
start:
lea ecx,MessageBox
sub esp,10h
mov DWORD ptr [esp],0
mov DWORD ptr [esp+4],offset temp
mov DWORD ptr [esp+8],0
mov DWORD ptr [esp+0Ch],0
add DWORD ptr [esp+4],4
call ecx
invoke ExitProcess,NULL
end start
雪    币: 342
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haras 2008-8-29 15:13
30
0
方程 的汇编就是强,写点与众不同
我把Fido(方程)的汇编源码还原成内联汇编形式了
好让大家看,原理和上面出的一样的,不同的编程方式,值得学习

#include<windows.h>
#include<stdio.h>

void main()
{   
          char* str="hello world\n";

    char* temp=str+400; //我把他原来的4*100倍,这样才有效果

        _asm{
                sub esp,16
                //mov DWORD ptr [esp],0
                mov eax,temp
                mov DWORD ptr [esp+4],eax
                //mov DWORD ptr [esp+8],0
                //mov DWORD ptr [esp+12],0
                sub DWORD ptr [esp+4],400
    mov eax,[esp+4]
                mov temp,eax

                //call ds:MessageBoxA 如果你把这句和上面三个0的注译去掉
                //和后面的MessageBoxA注译上,在IDA你会看到不同的方式

        }
    str=temp;

        MessageBoxA(0,str,0,0);
}
雪    币: 342
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haras 2008-8-29 16:15
31
0
对于字符串源代码加密实际上有很多种,上面几位都做出了,congratulation!
这题目不难,但每一个人实现的编程方式不一样,值得相互学习.下面我列出了另一种实现方式
参考了黑客技术的几本书 move


#include<windows.h>
#include<stdio.h>

void main()
{   
  char* str="hello world\n";

  char* temp;
  
  DWORD a=0x2828212C;
  DWORD b=0x2B33642B;
  DWORD c=0x00202836;
    
  _asm{

    mov     eax, a
    mov     ecx, b
    mov     edx, c
    mov     [ebp-12], eax
    
loc_401023:                             
      pusha
      lea     ebx,[ebp-12]
loc_40102B:                          
      xor     eax, eax
      lea     esi, loc_401023
      lea     ecx, loc_40104A
      sub     ecx, esi
loc_40103B:                             
      lodsb
      add     eax, eax
      loop    loc_40103B
      xor     [ebx],ah
      inc     ebx
      cmp     byte ptr [ebx], 0
      jnz     loc_40102B
      popa
loc_40104A:                   
      lea     eax, [ebp-12]
      mov temp,eax
      }

      str=temp;

  MessageBoxA(0,str,0,0);
}
bug当然会有的,我可不保证,我的是vc6 release IDA5.2 测式没问题
如果还有更好的字符串加密方式,欢迎跟帖 waiting for you 
游客
登录 | 注册 方可回帖
返回