|
[求助]OD加载程序,提示检测到调试器。
1、你机器里运行有WICE或SoftICE调试器?如果有,先关掉他们再试试。 2、如果没有运行有WICE或SoftICE等其它调试器,那就应该是程序使用TLS里检测OD或在加载Dll时在Dll中检测OD的,你可以在OD里的调试选项里设置“中断在系统入口”再加载程序,待中断后再用OD隐藏插件隐藏一下OD。 |
|
|
|
[求助]masm32安装问题
masm32的安装你是不是安装在磁盘的根目录里?如果不是,你试试安装在根目录里看还有没有问题,如果是,那你再检查一看看系统有没有杀毒软件之类的安全类的软件拦截的原因。最后将这些软件关闭再安装,如果都不是前面的问题,那就不好检查是哪里有问题了。 |
|
[求助]在编写内存补丁的时候遇到的问题
WriteProcessMemory是可以修改内存,只要你的地址和hProcess参数正确。如果实在还是不行,那就先用VirtualProtectEx函数改变一下进程的内存属性再用WriteProcessMemory修改。 |
|
[求助]win32汇编问题:帮忙指点一下这段代码
; 大概修改了一下。 LineInput proc _Bf,_Sr:byte,Pa;从内存中Pa开始位置读入一行字符串,返回字符串结束位置 ; 看你下面的操作,这一句的_Sr变量也有问题,这个变量应该是一个Buffer指针才对吧。所以应该改成下面那样。 LineInput proc _Bf,_OutStrBuff,Pa local IsExit;退出标志 local Num;计数器 mov Num,0;计数器初始化 push esi ; 你的代码改变了esi寄存器,一般函数规则是除了eax/edx/ecx之外其它寄存器在函数返回时必须恢复原始值。所以这里添加一句push esi的语句 ; lea esi,_Bf;移至开始位置 ; 这一句有问题,改成下面那句 mov esi,_Bf add esi,Pa .while TRUE;进入循环 add esi,Num cmp BYTE ptr [esi],10;比较该字符是否等于10(换行键) je labelExit;如果为换行键,跳转 cmp BYTE ptr [esi],13;比较该字符是否等于13(回车键) jne labelPro;不等于回车键,跳转 mov IsExit,TRUE;退出标志为真 cmp BYTE ptr [esi],0;是否为0(结束符) je Exit;如果为结束符则退出循环 inc Num;位置后移一位 .continue;跳至循环开始位置 Exit: .break;退出循环 labelPro: ; lea ax,_Sr ; 根据上面的定义,这一句改成下面那样。 mov eax,_OutStrBuff mov BYTE ptr [ax+Num],BYTE ptr [esi];将该字符加入字符串 ; 将这一句改成下面几句 mov edx,Num mov cl,byte ptr [esi] mov byte ptr [eax+edx],cl inc Num;计数器加1********************这句出错 .continue;跳至循环开始位置 labelExit: inc Num;位置后移一位 .break .if IsExit;如果退出标志为真且该字符等于10则退出 .endw; mov eax,esi;将位置返回 pop esi ; 恢复esi的值 LineInput endp |
|
[原创]我是菜鸟
看你想做什么了,如果只是兴趣,随便玩玩,学VB、Delphi、C/C++、汇编都可以,如果想学逆向,则得学习汇编,也可以先学习一点C/C++之后再学汇编。如果你想赚Meney,则应该学习那些比较受欢迎、热门的语言。 |
|
[求助]请大虾们帮忙看看这几句代码!
; 这一段代码的功能应该是将输入的ASCII码转换成十进制的ASCII码。 ; 如下面的代码如果String := '123456ABCD'; // 则经过转换后String := '9012345678'; for i := 1 to Length(String) do begin String[i] := Char((Ord(String[i]) mod $A) + $30); end; 00401BFA |> /8B5424 18 /MOV EDX,DWORD PTR SS:[ESP+18] 00401BFE |. |BE 0A000000 |MOV ESI,0A ; 从这里开始的话,eax=44h,那么, 00401C03 |. |0FBE0411 |MOVSX EAX,BYTE PTR DS:[ECX+EDX] 00401C07 |. |99 |CDQ 00401C08 |. |F7FE |IDIV ESI ; 到这里的时候dl的值是8h 00401C0A |. |8B4424 18 |MOV EAX,DWORD PTR SS:[ESP+18] 00401C0E |. |80C2 30 |ADD DL,30 ; 再加上30h则dl的值是38h,也是ASCII码的'8' 00401C11 |. |881401 |MOV BYTE PTR DS:[ECX+EAX],DL 00401C14 |. |41 |INC ECX 00401C15 |. |3BCD |CMP ECX,EBP 00401C17 |.^\7C E1 \JL SHORT SuperCli.00401BFA |
|
[求助]如何才能给vb6的text控件加个背景图片?
'子类化窗口函数。 'Module.pas File (在VB的全局模块文件定义如下代码,注:一定要全局模块里定义如下代码) Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpProc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long Public Const GWL_WNDPROC = -4 Public Const WM_CTLCOLOREDIT = &H133 Public Const TRANSPARENT = 1 Public lpOldProc As Long Public hBlackBrush As Long Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_CTLCOLOREDIT Then SetBkMode wParam, TRANSPARENT WndProc = hBlackBrush '替换Text的背景刷子换成我们定义的图像背景刷子。 Exit Function End If WndProc = CallWindowProc(lpOldProc, hwnd, uMsg, wParam, lParam) End Function 'Code File (在程序的代码文件写入如下过程) Private Sub Form_Load() Image1.Visible = False '这里我使用了Image1控件加载一张图片并隐藏Image控件 hBlackBrush = CreatePatternBrush(Image1.Picture.Handle) '用Image控件加载的图片创建一个Text使用的刷子 lpOldProc = GetWindowLong(hwnd, GWL_WNDPROC) SetWindowLong hwnd, GWL_WNDPROC, AddressOf WndProc End Sub Private Sub Form_Unload(Cancel As Integer) If hBlackBrush <> 0 Then DeleteObject hBlakBrush End If End Sub |
|
[求助]招C++兼职程序员
3. 谨慎选择相关主题的论坛 将相关的帖发到相关论坛,你能更快得到答复,也能使论坛更加规范。不符合主题的帖我们会移动。如果主题定位不清楚,可以发到『软件调试论坛』分论坛,这是一个综合性的论坛 虽然这样说,不过规矩还是要遵守的。 因招聘版的贴子需要经过相关版块版主验证通过才能发,所以这个贴子就锁了。你重新到招聘版块发贴吧,只要符合招聘版的发贴条件,就可以发贴。 招聘版块地址: http://bbs.pediy.com/forumdisplay.php?f=47 |
|
时光飞梭。。破解版
你好,欢迎你来这里交流技术,但论坛规则是不允许直接散发成品注册机和破解程序的,所以这贴锁了。还请见谅。 10.散发注册机或破解补丁 看雪论坛能从2000年走到今天,很重要的一点就是不散发注册机和破解程序 (加解密辅助工具除外)。欢迎你来这交流技术。 |
|
[求助]有没有机器码转汇编代码的软件?
用OllyDBG吧,汇编转机器码、机器码转汇编都行。 |
|
[求助]替换代码的问题
jmp跳转使用的是相对偏移地址,你取得的是绝对地址,肯定会出错。你应该将绝对地址转换成相对地址才行。计算公式如下: jmp 相对地址 = jmp 目的地址 - jmp当前地址 - jmp代码长度(jmp长跳这里是5,短跳这里是2,你使用的是E9长跳,所以jmp代码长度就是5)。 |
|
[求助]关于文件对齐一段函数的疑问
可以这么说,如,假如eax的值是7,而exe是以4字节对齐的,则ecx = 4,那么计算结果就如下: eax / ecx = 7 / 4 = 1 余 3 ecx - edx = 4 - 3 = 1 eax + ecx = 7 + 1 = 8 则,eax的对齐值是8 |
|
[求助]问一行代码的意思
没什么意思,因IsDebuggerPressent是API函数的名字,为了不引起冲突,所以在前面加一个符号用来区分变量和API而已, |
|
[求助]很简单的代码,又范迷糊了
jz是根据ZF零标志位来跳转的,所以并不一定要cmp比较,只要其它的操作指令也会影响ZF标志位就可以改变jz跳转了,jz是如果ZF=1则跳,ZF=0则不跳,inc指令会设置ZF标志位。inc eax如果eax为0,则ZF标志位会被inc设置为1,所以jz就会跳转了。 |
|
[求助]虚拟机代码
// 看了半天没看出你那一句有什么错,就将你的代码拿到我这里编译了一下,是有出错,但并不是在你指出的那一句上(难怪我看半天看不出什么错) 。而是我下面用红色标明的那两句上。 function InStr(index: integer; str1: string; str2: string): integer; var i,len, pos: integer; begin pos := 0; len := length(str2); for i := index to length(str1) do begin if copy(str1,i,len) = str2 then begin pos := i; break; end; end; result := pos; end; procedure EngineVM(strScript: string); var strCommand, strParameters: string; strParametr: array[0..9] of string; sSpace: integer; i: integer; strText: pointer; strLen: integer; strByte: byte; label encrypt; begin sSpace := InStr(1,strScript,#32) - 1; if sSpace <> -1 then begin strCommand := copy(strScript,1,sSpace); strParameters := copy(strScript,sSpace + 2,Length(strScript)); i := 0; while InStr(1,strParameters,',') > 0 do begin sSpace := InStr(1,strParameters,',') - 1; strParametr[i] := trim(copy(strParameters,1,sSpace));// strParmetr是一个数组类型,所以这里要加上[i] strParameters := copy(strParameters,sSpace + 2,Length(strParameters)); i := i + 1; end; strParametr[i] := copy(strParameters,1,Length(strParameters));// strParmetr是一个数组类型,所以这里也要加上[i] end else begin strCommand := strScript; end; if strCommand = 'сообщение' then begin MessageBox(Form1.Handle,pchar(strParametr[0]),pchar(strParametr[1]),StrToInt(strParametr[2])); end else if strCommand = 'зашифровать' then begin strText := pointer(strParametr[0]); strByte := StrToInt(strParametr[1]); strLen := Length(strParametr[0]); asm mov ecx, strLen mov eax, strText dec eax mov bh, strByte @encrypt: xor byte ptr[eax+ecx],bh loop @encrypt end; ShowMessage(strParametr[0]); end else begin ShowMessage('Invalid command'); end; end; |
|
|
|
[求助]如何给可执行程序添加新功能!
下载论坛的精华1~9,搜索'Pediy'有很多实例了。 |
|
|
|
[求助]对代码重定位的一点点疑惑
假如下面那段代码是在自己程序中的代码。因为pop ebp的地址也是00401005,这时sub ebp,00401005的结果ebp就是等于0了。不过现在假如将这段编译好的二进制代码拷贝到00402000处运行,你想会怎样? 00401000 call 00401005 ; call nStart 00401005 pop ebp 00401006 sub ebp, 00401005 ; sub ebp,offset nStart 假如将这段代码拷贝到00402000处运行,就会变成如下面这样,你还认为是没用的吗? 00402000 call 00402005 00402005 pop ebp ; ebp == 00402005 00402006 sub ebp, 00401005 ; 注nStart的标号地址在被编译为二进制后就是固定的00401005了,不会再变了,这时你认为ebp还是等于0? |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值