Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.

【转载】密码破解,拦截等类

Go down

【转载】密码破解,拦截等类 Empty 【转载】密码破解,拦截等类

Post by cyjian on December 12th 2014, 09:50

delphi 密码拦截技术


delphi 密码拦截技术                                                陪老婆五一快玩死了  明年结婚  在北京的同志留个联系方式 明年请你们喝喜酒
   这是一个进程拦截密码技术的源码 ! 很值得分析的饿 !

原理解析: 记得n年前,我还不懂事的时候,研究游戏帐户找回工具,那时常被游戏的基址搞得。。。气血不调、大便干燥、日不能食、夜不得寐。。。那时就幻想要是我能读 取寄存器就好了。当时不知道有Debug API这个东西。早上好好看了点资料,自己摸索了下,有点心得,与同学们分享下。网上有关DEBUG API的资料不是很多有个英文版的和一个翻译版的。同学们可以搜索下(key :win32 debug api),看看更详细的介绍。


debuggee被测试程序(Test.exe)很简单,明码比较的代码如下:  

procedure Ttest.Button1Click(Sender: TObject);  
begin  
if Edit1.Text='ade123' then  
MessageBox(0,'密码正确','恭喜',48)  
else
MessageBox(0,'密码错误','提示',48)  
end;  

用OD载入得到关键算法如下:(怎么找关键算法?我也不是太懂,我也是菜鸟,凭经验+运气找到的。呵呵)  

004501C3    E8 54F2FDFF     CALL message.0042F41C  
004501C8    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]  
004501CB    BA 28024500     MOV EDX,message.00450228                 ; ASCII "ade123"
004501D0    E8 4740FBFF     CALL message.0040421C  
004501D5    75 15           JNZ SHORT message.004501EC  
004501D7    6A 30           PUSH 30  
004501D9    68 30024500     PUSH message.00450230  
004501DE    68 38024500     PUSH message.00450238  
004501E3    6A 00           PUSH 0  
004501E5    E8 AE62FBFF     CALL   
004501EA    EB 13           JMP SHORT message.004501FF  
004501EC    6A 30           PUSH 30  
004501EE    68 44024500     PUSH message.00450244  
004501F3    68 4C024500     PUSH message.0045024C  
004501F8    6A 00           PUSH 0  
004501FA    E8 9962FBFF     CALL   
004501FF    33C0            XOR EAX,EAX  

注意红色那行,将密码所在地址传递给EDX,继续一个CALL进行比较。而如果,我们在004501D0这里将程序断点断下来,然后我们去看看EDX的值,这个值就是存放的密码的地址啊。奸笑中,哈哈。  

实现代码如下:  
begin  
wHandle:=FindWindow('TTest',0); //Tdebugee
//Sleep(5000);
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
//wHandle:=WindowFromPoint(p);
if wHandle>0 then ade_ThreadId:=GetWindowThreadProcessId(wHandle,@ade_ProcessId);  
if ade_ThreadId>0 then ade_Process:=OpenProcess(PROCESS_ALL_ACCESS,False,ade_ProcessId);  
ade_Thread:=OpenThread(ade_ThreadId,False);  
if DebugActiveProcess(ade_ProcessId)then  
begin  
    //============DebugStart===============
    while True do
    begin  
      if WaitForDebugEvent(DebugEv,INFINITE) then  
       begin  
         //dwContinuesStatus:=DBG_EXCEPTION_NOT_HANDLED;
         case DebugEv.dwDebugEventCode of  
         EXCEPTION_DEBUG_EVENT:       //意外处理,断点等时触发。
           begin  
           if (DebugEv.Exception.ExceptionRecord.ExceptionCode<>EXCEPTION_BREAKPOINT) then  
               rc:=False //目标程序自己异常,让它自己处理
           else
             begin        //处理断点
               if DebugEv.Exception.ExceptionRecord.ExceptionAddress=Pointer(ade_address) then  
               begin  
               SuspendThread(ThreadHandle);  
               rc:=True;  
               Context.ContextFlags:=CONTEXT_FULL;  
               GetThreadContext(ThreadHandle,Context);  
               //ReadProcessMemory(ade_Process,Pointer(Context.Edx),@adr,4,num);
               //MessageBox(0,'tishi',PChar(IntToStr(Context.Edx)),48);
               EAX:=Trim(GetMem(ade_Process,Context.Edx,20));  
               MessageBox(0,'断点事件产生',PChar(eax),48);  
               ResumeThread(ThreadHandle);  
               end;  
             end;  
           //Break;
           end;  
         CREATE_PROCESS_DEBUG_EVENT: //刚创建调试时触发
          begin  
          ThreadHandle:=DebugEv.CreateProcessInfo.hThread;//线程
          ade_buf[0]:=$cc;  
          ade_buf[1]:=$90;  
          SuspendThread(ade_Thread); //挂起
          WriteProcessMemory(ade_Process,Pointer(ade_Address),@ade_buf,2,WriteMemory); //向messagebox写入断点
          ResumeThread(ade_Thread); //恢复
          MessageBox(0,'Start Debug,写入完毕','Title',48);  
          //Break;
          end;  
         EXIT_PROCESS_DEBUG_EVENT:    //退出调试时触发
          begin  
          MessageBox(0,'End Debug','Title',48);  
          //Break;
          end;     
          end;//end case
         if rc then  
         ContinueDebugEvent(DebugEv.dWProcessId,DebugEv.dwThreadId,DBG_CONTINUE)//本程序处理
         else
         ContinueDebugEvent(DebugEv.dwProcessId,DebugEv.dwThreadId,DBG_EXCEPTION_NOT_HANDLED); //目标程序自己处理
       end;   
    end;   
end  
else
MessageBox(0,'调试目标进程出错','Title',48);  
end;  

代码没有进行修改,尽管能正确截取,但是破坏了原程序的运行,需要把CC改回,并将EIP减一。
很实用的电脑系统密码破解



(一)
重新启动电脑,启动到系统登录界面时,同时按住Ctrl+Alt键,然后连击Del键两次,会出现新的登录界面,用户名处输入 “Administrator”密码为空,回车即可登录,登录后,打开控制面板选/用户账户/更改账户/点击原来的“账户名”/更改我的密码/输入新密 码,再次输入新密码,然后点击“更改密码”按钮。。。。。。。
(二)    1、重新启动计算机,开机后按下F8键不动直到高级选项画面出现后,再松开手,选择“命令提示符的安全模式”回车。
2、运行过程结束时,系统列出了系统超级用户“administrator”和本地用户“*****”的选择菜单,鼠标单击“administrator”,进入命令行模式。
3、键入命令:“net user ***** 1111 /add”,强制将“*****”用户的口令更改为“1111”。若想在此添加一新用户(如:用户名为abcdef,口令为1111)的话,请键入 “net user abcdef 1111/add”,添加后可用“net localgroup administrators abcdef /add”命令将用户提升为系统管理组“administrators”的用户,并使其具有超级权限。
4、重新启动计算机,选择正常模式下运行,就可以用更改后的口令“1111”登录“*****”用户了。
(三)    (三)
用Windows xp系统安装光盘,以修复系统的方法,破解超级机算机管理员密码
第1步:将系统设为光盘启动,并放入系统安装光盘。当出现第一个选择界面后按回车,出现第二个选择界面后按“R”键开始修复安装。随后安装程序会检查磁盘并开始复制文件。文件复制完成后,系统将自动重启。
第2步:重启后,系统会进入图形化的安装界面。注意:此时应密切注视界面的左下角,一旦出现“正在安装设备”进度条时,立即按下组合键“Shift+F10”。接着会出现意想不到的事情,一个命令提示符窗口出现在我们的面前。这是破解密码的关键所在。
第3步:在命令提示符窗口中键入“Lusrmgr.msc”并回车(不包括双引号),打开“本地用户和组”管理工具。点击左侧的“用户”然后再右击右侧的 管理员账户,选择“设置密码”。此时,会弹出一个警告窗口。大意是说修改密码后,系统中的某些信息将变得不可访问。这里主要指用EFS加密过的文件,并且 此前未曾导出证书,则修改密码后这些文件将无法访问。如果没有这种文件,我没就不要理会它,直接单击“继续”,然后输入新密码,并单击确定。然后关闭“本 地用户和组”和“命令提示符”窗口,并继续完成修复安装。完成安装后,系统管理员账户就重新“激活”了。
(四)     
WinXP/2000下对策:删除系统安装目录\system32 \config下的SAM文件,重新启动,此时管理员Administrator账 号已经没有密码了,用Administrator帐户登陆系统,不用输入 任何密码,进入系统后再重新设置登陆帐户密码即可。
(五)   
使用win pe (启动盘)启动后用DOS命令修复!(现在多数的win pe 中配备了系统密码破解软件使用起来快捷方便)
(六)    如果是CMOS密码忘了:
将主板电池扣出来等5分钟(或者让电池点放完),在反装进去即可。

cyjian
Spammer
Spammer

Posts : 211
Points : 38915
Reputation : 0
Join date : 2014-06-18

View user profile

Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum