首页
社区
课程
招聘
利用Debug Api 获得QQ2007密码
发表于: 2008-3-4 12:52 43977

利用Debug Api 获得QQ2007密码

2008-3-4 12:52
43977
收藏
免费 7
支持
分享
最新回复 (84)
雪    币: 282
活跃值: (358)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
26
之前试了下是可以的.

当时拿QQ开刀是学习下DEBUG API 罢了.
2008-3-7 21:40
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
27
我用ue怎么都不能找到
2008-3-7 22:39
0
雪    币: 123
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
改为C了代码好少啊~
2008-3-8 15:28
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
好东西。
LZ能否帮我看看下面的调试EPE1201代码的hook段如何优化一下,调试虽然通过了,但代码看起来很别扭,看得顺眼的代码又编译通不过。

program RunEPE_DLL;

uses
  Windows,commdlg,
  Messages;

{$R *.res}

const

  ClassName  = 'EPETRegisterForm';
  szAppTital = 'EPE注册';
  szfrm                         = 'SetContextThread Set the EIP to %1X';

var
  wc : WNDCLASS;
  HMainWnd : HWND;
  hexp, hbtn,hbtnOpen,hltb,ltbcount: Dword ;
  AMsg : MSG;

  handlib : HMODULE;
  IniEPE  : Pointer;
  EPESDK  : String ;
  tmps    : string ;
  hmap    : THANDLE;
  pmap    : Pointer;
  Writened: Dword  ;

  ofn:  OPENFILENAME;
  fnm:  string;

  oldpro        :Dword ;
  bfhook        :array[0..100] of byte ;

function MyTmpPath : string ;
var
  a :  Array [0..256] of char ;
begin
  GetTempPath(256,a);
  Result := a;
end;

procedure hook ;
label
   newZwSetContextThread, Funcbyte ,toSetThreadContext,next;
var
  myEax  : pointer ;
        _SetThreadContext:DWORD;
  _toSetThreadContext:DWORD;
begin
        myEax :=GetProcAddress(GetModuleHandle('ntdll.dll'),'ZwSetContextThread');
  _SetThreadContext := integer(myEax);
        VirtualProtect(myEax,5,PAGE_EXECUTE_READWRITE,@oldpro);
  asm
  mov myEax,offset Funcbyte
  end;
        VirtualProtect(myEax,10,PAGE_EXECUTE_READWRITE,@oldpro);
  asm
  pushad
        mov esi,_SetThreadContext
        mov edi, offset Funcbyte
        mov ecx,5
        rep movsb
        mov eax,_SetThreadContext
        sub eax,offset Funcbyte
        sub eax,5
        mov dword ptr[toSetThreadContext],eax
        mov eax,_SetThreadContext
        mov byte ptr[eax],0E9h
        mov edi,offset newZwSetContextThread
        sub edi,eax
        sub edi,5
        mov dword ptr[eax+1],edi
  popad
  end;

  exit;

newZwSetContextThread:
  asm
  pushad
  mov eax,[esp+28h]
  mov eax,dword ptr[eax+0B8h]
  cmp eax ,$70000000
  jbe next
  push eax
  end;
  wsprintf(@bfhook[0],szfrm);
  SendMessage(hltb,LB_INSERTSTRING,-1,integer(@bfhook));
  asm
  add esp,0Ch
  {
  push eax
  lea eax, @szfrm
  push eax
  lea eax, @bfhook
  push eax
  call wsprintf
  add esp,0Ch

  lea eax, @bfhook
  push eax
  push -1
  push 181
  push hltb
  call SendMessage

  }
next:
  popad
Funcbyte:
  db 0
  dd 0
  db 0E9h
toSetThreadContext:
  dd 0
  end;
end;

function WndProc(AWnd:HWND; Msg:UINT; wp:WPARAM; lp:LPARAM):LRESULT;stdcall;
begin
  Result := 0;
  case Msg of
    WM_DESTROY:
       PostQuitMessage(0);
    WM_CREATE:
      begin
        hexp := FindWindow(ClassName,szAppTital );
//        SetWindowText(hexp,'Fucking');
//                    SetWindowText(AWnd,'Program Manager');
                    hbtn:=CreateWindowEx(0,'BUTTON','Clear', WS_CHILD or WS_VISIBLE,10,10,90,40,AWnd, 0, hInstance, 0);
                    hbtnOpen:=CreateWindowEx(0,'BUTTON','OpenFile', WS_CHILD or WS_VISIBLE,110,10,90,40,AWnd, 0, hInstance, 0);
                    hltb:=CreateWindowEx(0,'LISTBOX','ltbfuck', WS_CHILD or WS_VISIBLE or WS_VSCROLL,0,60,400, 340,AWnd,0, hInstance,0);
        tmps :='Only Testing...hehe';
                    SendMessage(hltb,LB_INSERTSTRING,-1, integer(@tmps[1]));
        tmps :='Run this program and then run epe packed file...';
                    SendMessage(hltb,LB_INSERTSTRING,-1,integer(@tmps[1]));
        tmps :='The OEP maybe is the lastest EIP to be set!...';
                    SendMessage(hltb,LB_INSERTSTRING,-1,integer(@tmps[1]));
                    tmps :='But you also can debug me for debug a epe packed file';
                    SendMessage(hltb,LB_INSERTSTRING,-1,integer(@tmps[1]));
        tmps :='Fucking.........';
//                    SendMessage(hltb,LB_INSERTSTRING,-1,integer(@tmps[1]));
                    hook ;
       end;
    WM_COMMAND:
      begin
            if lp = hbtn then
        begin
                                  ltbcount:=SendMessage(hltb,LB_GETCOUNT,0,0);

                                  while not(ltbcount=0) do begin
                                          ltbcount :=SendMessage(hltb,LB_DELETESTRING,0,0)
                                  end;
        end
       else if lp = hbtnOpen then
         begin
          SetLength(fnm, MAX_PATH);
          ZeroMemory(pchar(fnm), 0);
          ofn.lStructSize := sizeof(OPENFILENAME);
          ofn.hWndOwner := 0;
          ofn.lpstrFilter := 'EXE Files'+#0+'*.EXE'+#0#0;
          ofn.lpstrFile := pchar(fnm);
          ofn.nFilterIndex := 1;
          ofn.nMaxFile := MAX_PATH;
          ofn.lpstrTitle := 'who are you IV by shoooo[CUG]';
          ofn.Flags := OFN_EXPLORER or OFN_FILEMUSTEXIST;

          if  GetOpenFileName(ofn) then  winexec(pchar(fnm),0);

         end;
            end;
    WM_MOUSEMOVE:
      begin
            ReleaseCapture ;
            SendMessage(AWnd,WM_NCLBUTTONDOWN,HTCAPTION,0);
      end;
    else
       Result := DefWindowProc(AWnd, msg, wp, lp);
  end;
end;

begin

  with wc do begin
    hInstance := system.MainInstance ;//HInstance;
    style := CS_VREDRAW or CS_HREDRAW;
    cbClsExtra := 0;
    cbWndExtra := 0;
    hIcon := LoadIcon(0, IDI_APPLICATION);
    hCursor := LoadCursor(0, IDC_ARROW);
    hbrBackground := GetSysColorBrush(COLOR_WINDOW);
    lpfnWndProc := @WndProc;
    lpszMenuName := nil;
    lpszClassName := ClassName;
  end;

  RegisterClass(wc);

  HMainWnd := CreateWindow(ClassName,
                           szAppTital,
                           WS_OVERLAPPEDWINDOW or WS_VISIBLE , //Style: window style
                           50,50,400,300,0,
                           0,     //Menu
                           system.MainInstance , //HInstance,
                           nil);  //Param: pointer to window-creation data

  if HMainWnd <> 0 then
   begin
     ShowWindow(HMainWnd, CmdShow);
     UpdateWindow(HMainWnd);
   end
  else  halt(100);

  EPESDK := MyTmpPath + 'V220071201.EPE' ;
  handlib := LoadLibrary(@EPESDK[1]);
  if handlib=0 then
  begin
    MessageBox(0,'找不到库文件!请确保之前运行过一次EPE12.01加壳的程序。','!!!',MB_ICONINFORMATION);
    exit ;
  end else
  begin

//    MessageBox(0,'运行过程中可能看不到此程序的界面,但有进程,你只需运行加壳的PE即可!','!!!!!!!!',MB_ICONINFORMATION);

     sendmessage(hltb,LB_INSERTSTRING,-1,integer(@EPESDK[1]));
  end;

   //  SetOnBefore('kernel32.dll','SetThreadContext',my_SetThreadContext);
   //  SetOnAfter('kernel32.dll','CreateProcessA',my_CreateProcessA);
//  while GetMessage(AMsg, 0, 0, 0) do begin
//    TranslateMessage(AMsg);
//    DispatchMessage(AMsg);
//  end;

  IniEPE := GetProcAddress(handlib,'EncryptPE_Init2');
  asm
     mov eax,IniEPE;
     call eax;
   end;

   MessageBox(0,'执行到完成了。','!!!',MB_ICONINFORMATION);

end.
2008-3-8 16:17
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
自己找一找断点就行了,QQ的DIY版很多啊

大概位置在 call    dword ptr [<&BasicCtrlDll.Encode16>]    ; BasicCtr.Encode16  之前
2008-3-8 16:20
0
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
幸好我机器里有这个版本的QQ 测试成功了

不过很想学习下这个断点是如何找到的呢 ?
base :=  Pointer(DWord(ModInfo.lpBaseOfDll)+$148A3);

例如这里的 $148A3

哪位大侠讲解下吧
2008-3-9 12:33
0
雪    币: 241
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
收藏起来学习
2008-3-11 20:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
感谢楼主,改成C的大牛!
总是能收获很多知识
经典啊!
我测QQ2008会写入进程失败
下个2007试试
2008-3-12 06:49
0
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
不知道这个DLL文件的偏移地址是如何找到的 没有人知道吗
2008-3-12 12:00
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
35
TX赶紧VM吧
2008-3-12 13:22
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
可惜没delphi编译器,呵呵
2008-3-13 18:37
0
雪    币: 205
活跃值: (171)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
37
兄弟,别用delphi啊
大家都看不懂,用c/c++多好,再不行汇编也好啊,都比该死的delphi强
2008-3-14 09:43
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
Delphi的话 我就收藏了 嘿嘿
2008-3-14 11:23
0
雪    币: 250
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
Delphi很强大的说
给出思路会更好
2008-3-14 18:37
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
[QUOTE=davidhee;425594]自己找一找断点就行了,QQ的DIY版很多啊

大概位置在 call    dword ptr [<&BasicCtrlDll.Encode16>]    ; BasicCtr.Encode16  之前[/QUOTE]

能不能说的好找的,找的头晕。多好CALL呀!谢了。
2008-3-14 22:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
准备什么时候更新呢楼主!
2008-3-18 13:18
0
雪    币: 235
活跃值: (50)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
42
收藏代码,经典!!!
2008-3-25 13:06
0
雪    币: 79
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
感谢forgot的指引,再参考了UnPacKcN的一篇文章,我调试了一下,发现确实是明文,特别是输入相同的字符作为密码的时候更容易观察,比如输入测试密码是$$$$$$,那么那段明文可能像这个样子:xfircvscxggbwkfnqduxwfnfoz$vsrtkjprepggxrpnrvystmwcys$yycqpevikeffmznimkkasvwsre$nzkycxfxtlsgypsfadpooefxzb$coejuvpvaboygpoeylfpbnpljv$rvipyamyehwqnqrqpmxujjloov$。每个密码字符中间插入了相同长度的垃圾,最后一位总是密码最后一位。
2008-3-27 19:43
0
雪    币: 1263
活跃值: (5119)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
44
顶起来学习...
2008-3-28 01:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
是啊,, 这个地址是怎么找的呢?? 我也想知道啊.. 哪位大侠说说哈. .
2008-3-28 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
学习一下,谢谢
2008-3-28 17:26
0
雪    币: 215
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
DELPHI,我喜欢,窝藏了,明天试试
2008-4-1 04:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
我可以叫你一声强人不
好厉害哦你!! 学习
2008-4-1 16:41
0
雪    币: 175
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
看不懂
     晕
2008-4-1 20:56
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
简单看了一下,原理不太懂
2008-4-1 21:40
0
游客
登录 | 注册 方可回帖
返回
//