|
[求助]Win7 64位如何给屏幕拍快照
按下键盘上的<PrintScreen>键,屏幕图像就会存到剪贴板上,打开操作系统自带的图画工具,把剪贴板上的图像粘贴出来,保存成图片文件就可以了。 |
|
[分享]多行汇编器 2.1.1 简单汉化版
多谢分享,顺便附上原版插件方便使用 |
|
|
|
|
|
[求助]请问下暗桩的原理是什么
你说的这种情况应该不属于暗桩,最大的可能是输入表没有完全修复好,程序在调用个别API时会导致异常。跟踪脱了壳的程序,看看在哪里出现异常,因为什么导致的异常,再跟踪带壳的程序,在出现异常的地方设置执行断点,断下后,比较一下,看看和无壳程序有什么不同,然后再顺藤摸瓜才有可能解决问题。 |
|
[求助]请问下暗桩的原理是什么
顾名思义,“暗桩”显然是专门针对破解的,当然,一般情况下,只有商业软件才会使用此招。 作者在软件保护方面故意卖出明显破绽,吸引破解者注意并下手,而实际上程序暗地里却另外布设了若干更加隐秘的保护,程序在运行中如果探测到非法破解,并不是直接报错或拒绝继续运行,而是让程序进入病态并继续运行。这时,程序的核心功能往往丧失或不正常。破解者一般是非专业人士,不会深度去使用专业软件,因而也无法轻易发现问题所在。 把软件保护和专业应用如此紧密结合,无疑是给破解者设置了一个巨大的障碍,只要保护策略设计得当,可以有效地阻止大多数非专业人员的破解,从而达到保护软件的目的。 |
|
|
|
|
|
[求助]脱壳中单步进入和单步步过区别是什么?
不是所有的 CALL 都能步过,当然,正常情况下应该是都能步过,但是,如果是如下这种情况就不能步过了: CALL FUN01 XOR EAX,EAX INC EAX . . . FUN01: POP EAX CALL FUN02 . . . "CALL FUN01" 指令后面的指令永远都没有机会执行了,因为函数 "FUN01" 在入口处就把返回地址给丢弃了(POP EAX)。“CALL FUN01”指令实际上起到的是 “JMP FUN01” 指令的作用。所以,必须选择步入才能保证对程序的调试控制。 |
|
|
|
[注意]祝林版身体早日康复
林版,早点回来,我们需要你。 |
|
[求助]8086汇编的一个问题,大家帮忙看看谢谢!
从贴出的中断处理代码看,楼主并没有专门处理返回地址,程序必然会陷入死循环,与 push eax 指令本身无任何关系!计算机程序遵循严密的逻辑,是最完美的科学,楼主不要迷信,要相信科学! 如果楼主喜欢坚持自己的代码,那就适当增加几行代码看看问题是否能够得到解决 do0: jmp short s1 db "error!", 0 s1: ; 新增代码开始 push bp mov bp,sp inc word ptr[bp+2] inc word ptr[bp+2] ; 新增代码结束 push ax push cx push di push si mov ax, 0b800h mov es, ax mov di, 160*10 mov ax, 0 mov ds, ax mov si, 202h mov ch, 0 s2: mov cl, ds:[si] jcxz ok mov es:[di], cl mov es:[di].1, BYTE ptr 2 inc si add di, 2 jmp short s2 ok: pop si pop di pop cx pop ax ; 新增代码开始 mov sp,bp pop bp ; 新增代码结束 iret |
|
[求助]8086汇编的一个问题,大家帮忙看看谢谢!
楼主可以试试下面的代码,已经在 MASM 6.11 环境下编译通过,程序没有设置堆栈段,编译完成后,必须用 exe2bin.exe 命令把 .exe 类型的程序转换为 .com 类型。 <--- 以下代码开始 CODE SEGMENT PARA ASSUME CS:CODE,DS:CODE,ES:CODE ORG 100H START: jmp BEGIN IPD DW 00 CSD DW 00 MSG db 0ah,0dh,0ah,0dh," operation caused a devide overflow error !",0ah,0dh,0ah,0dh,"$",00 Int0: push bp mov bp,sp push ax push dx push ds inc word ptr[bp+2] inc word ptr[bp+2] push cs pop ds lea dx,MSG mov ah,09h int 21h pop ds pop dx pop ax mov sp,bp pop bp iret GetI: push bp mov bp,sp push ax push bx push si push ds xor ax,ax mov ds,ax xor si,si mov bx,[si] mov ax,[si+2] mov [bp+4],ax mov [bp+6],bx pop ds pop si pop bx pop ax mov sp,bp pop bp retn SetI: push bp mov bp,sp push ax push bx push si push ds xor ax,ax mov ds,ax xor si,si mov ax,[bp+4] mov bx,[bp+6] cli mov [si],bx mov [si+2],ax sti pop ds pop si pop bx pop ax mov sp,bp pop bp retn BEGIN: push ax push bx call GetI pop bx pop ax mov IPD,ax mov CSD,bx mov ax,offset Int0 mov bx,cs push ax push bx Call SetI add sp,4 mov ax,0ffffh mov cl,1 div cl mov ax,IPD mov bx,CSD push ax push bx Call SetI add sp,4 mov ax,4c00h int 21h CODE ENDS END START <--- 以上代码结束 当中断发生时,所有寄存器均维持原样没有任何问题,问题是返回地址指向 div cl 指令,如果不处理,中断返回后,还将继续执行 div cl 指令,程序将会陷入死循环。所以,在中断处理程序中,需要把返回地址的 IP 值增加 2(因为 div cl 指令长度为 2 个字节),以保证中断返回后,从 div cl 的下一条指令处继续执行。 |
|
汇编指令LEA的一个小问题
楼上说的对,间接寻址不能使用ax,cx和dx这3个寄存器,楼主的寄存器没有用对。只要打开debug,输入LEA汇编指令一试就全明白了。 |
|
[求助]8086汇编的一个问题,大家帮忙看看谢谢!
作为中断服务程序,一开始必须要把所有的寄存器都入栈,退出时再全部恢复,如果必要,甚至需要考虑切换到自己的堆栈。 do0: jmp short s1 str1: db "error!", 0 s1: push ax push bx push cx push dx push si push di push ds push es push cs pop ds mov ax,0b800h mov es,ax lea si,str1 mov di,160*10 cld s2: lodsb or al,al jz s3 mov ah,7 stosw jmp short s2 s3: pop es pop ds pop di pop si pop dx pop cx pop bx pop ax iret 试试看这个能否正常。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值