|
在不启动系统的情况下,如何判断操作系统是32位还是64位?
这个看似先有蛋还是鸡的问题非常简单: 假设你想确认A电脑上的1号硬盘上面的windows位数,可以把1号硬盘从A电脑上取下,接到B电脑上 然后以windows PE (预安装环境)的光盘启动B电脑,这样就没有启动1号硬盘上的系统,而是启动光盘上的PE系统,然后通过该系统上的集成工具对1号硬盘上的系统进行脱机检测,就可以知道硬盘上的windows是32位还是64位的,后者的系统目录会有一个包含wow64字串的子目录 这种解决方案与搂主的命题不冲突,因为确实没有"启动1号硬盘上的系统",真正加载到内存的是(启动的是)光盘上的系统 |
|
[原创]新人报道了
现在集满50kx还能转正式会员不? |
|
每次遇到这种CALL 就迷糊了,lea 如何转化成mov?
其实我这个例子是用2个16字节的局部"字符数组"来代替字符串,模拟的汇编代码,可能与真实的编译器生成的代码有所差异 你应该用高级语言编写操作字符串的例程,然后用delphi编译器编译成汇编文件,查看汇编文件中的内容, 这样就可以理解处理器是如何读写字符串的,后者说白了就是连续的相同大小的内存区域(每个ASCII字符占1字节,每个unicode字符占2字节),这块区域又叫缓冲区,通常,为了安全起见,假设程序员在编程时指定16字节空间,编译器实际分配的空间要大一些,通常是可以被4字节整除的缓冲区大小,如果读写这块缓冲区的函数没有检查用户输入的数据长度是否存在"数组越界",那么就给缓冲区溢出攻击创造了条件,例如strcpy() 如果delphi编译器不支持生成中间的汇编文件,那么用IDA PRO 加载并反汇编最终的可执行文件,查看汇编代码即可. |
|
每次遇到这种CALL 就迷糊了,lea 如何转化成mov?
假设变量s1,s2在main函数栈中分配,各为指向16字节长度字符串的起始字符地址的指针,main函数使用ebp寻址栈变量,两个字符串中的每个字符都占1字节,则有如下汇编代码(Intel & NASM风格) ****************** main函数序言部分 ****************** push ebp mov esp, ebp sub esp, 24 ;由于下面要分配2个字符串,共32字节(等于16进制的20h字节)的空间,因 ;此这里将esp,即栈顶,向内存低址方向,扩展24h字节, ;多余的4字节为索引 ***************** main函数主体 ****************** mov ecx, [ebp-24] ;[ebp-24]处的4字节存储单元,作为索引寻址每个字符串中的字符,现 ;在ecx作为索引 mov eax, [ebp-20] ;取得变量s1 mov ecx, 0 ;第一个字符索引为0 mov [eax+ecx*1], 0x61 ;将s1指向的字符串的第一个字符設为 'a',索引乘以字符大小1,即为偏移量,偏移量加上作为起始地址的eax,即能找到目标字符 mov edx, [ebp-10] ;取得变量s2 add ecx, 1 ;第二个字符索引为1 mov [edx+ecx*1], 0x62 ;将s2指向的字符串的第二个字符設为 'b' mov eax, [ebp-10] push eax ;s2,作为第2个参数先压栈 mov edx, [ebp-20] push edx ;s1作为第1个参数后压栈 call 004A5274 add 8 ;由主调函数清除压栈参数 ************ main函数尾声 ************ xor eax, eax add esp, 24 ;清除3个main的局部变量 leave retn |
|
每次遇到这种CALL 就迷糊了,lea 如何转化成mov?
根据ebp的负偏移来访问的栈地址,应该是局部变量没错. 这是个双字(4字节的局部变量) .即 dowrd ptr [ebp-18]是一种叫做"存储器寻址"的操作数模式, 用于取得"栈底指针指向的地址处,偏移18h字节地址处的值",然后将该值复制到eax中 |
|
windows7下获取jmp esp的疑问
别断在DLL函数入口处,在main中或_start中找个函数调用点来断,然后F9 ,总不可能所有位置F9都直接停止工作吧,除非有反调试机制 如果遇到jnz ,前面应该有 cmp指令,如果cmp前的指令允许你改变某个程序值,你可以尝试让它等于cmp后面第二个比较操作数,这样就不会跳转到jnz指示的地址了。 我知道,你是把10进制的qq号转成16进制的qq号对吧 |
|
windows7下获取jmp esp的疑问
抱歉,刚才看清楚标题是win7下。。。。 断点后要按F9,这样才会运行到断点处停止,然后单步跟进去,看是否调用了DLL中的函数, 如果不能运行,也可以尝试从程序的main函数开始调试,找到任何有可能将用户输入数据放在栈上的函数调用,它就是你的突破口。 因为我没有这个程序的可执行文件调式,加上所学有限,只能讲到这里。 不过楼主实在太有才了,竟然将qq号码保存在内存地址中,待我读取该处的值才能知道哦 开玩笑的,我没用qq,话说回来,你先试试上面的办法,我这里边调试找解决方案。 |
|
windows7下获取jmp esp的疑问
楼主是说你在xp下察看运行的macTray.exe进程,没有启用DEP吗? 看来服务器版的操作系统安全性确实比较强一些. 从你第一张的截图来看, 你的EIP当前指向0x005B9AB0, macTray.exe的入口点; 你需要在0x005984CE下断点,让程序执行流程来到此处并执行jmp esp 指令,该指令执行后,将返回 0x75EE338A地址处,该处是一个"绝对虚拟地址",应该是kernel32.dll 这个动态链接库中的某个函数, 这个地址应该是可以通过缓冲区溢出来覆盖成shellcode所在的地址的,然后程序流程将跳转到你的shellcode所在地址并执行。 关键还是要看控制权来到 0x005984CE 处的过程中,右下侧的栈区如何变化,然后确定你可以通过对话框等输入数据来操纵这个栈区,覆盖栈地址 0x0018FF8C处的返回地址才行。 |
|
windows7下获取jmp esp的疑问
使用 sysinternal 的进程浏览器可以比较好的确认操作系统是否为当前调试程序添加了数据执行保护(类似不可执行栈)与地址空间加载随机化,如下所示: 因此结论就是,即便在漏洞程序中找到了jmp esp ,如果操作系统启用了加载时DEP与ASLR,那么也很难制作相应的溢出程序 |
|
[求助]驱动 为什么需要设备?
LZ请想想"设备驱动程序"这个名词,就明白硬件设备对于驱动的重要性了. |
|
[求助]请问新手脱壳应该去脱什么类型的壳
我手边有一个常用加壳器加壳的PE文件,应该适合新手学习和培养脱壳的技能,如下所示, 用 PEiD 查壳工具检测,该PE文件使用 UPX系列加壳,程序入口点似乎是 0x00005410 : 该加壳文件来自于<恶意代码分析实战>一书中的配套资源,这里可以下载练习: Lab01-02.rar 练习前需要关闭任何第三方杀毒软件,因为它们的特征码库可能会匹配文件的壳签名. 如果你不放心,请在类似VMWARE 的虚拟机环境下运行,该文件没有使用反虚拟机技术,所以动态调试也可以, 最好是结合 IDA PRO与Ollydbg来分析,后者就自带脱壳插件了. |
|
[求助]求大神 帮忙解决Hack shield 问题
你看下游戏官网上的最低系统需求,搞不好是你那台弹框的系统配置太低,不符合游戏运行环境的要求, 然后,看看游戏程序是32位还是64位的,如果是后者,需要你的CPU支持64位才行,如果太旧买个新的, 就连早期的Intel Core 2 Duo都已经支持64位架构了,AMD的兼容性要差一些; 还有一种可能,就是弹框的原因是虚假的,实际上,它不是检测到有调试程序,而是检测你的硬件配置,例如,只要主板不是华硕的,就拒绝启动游戏,然后欺骗你说检测到调试程序。 不要认为不可能,之前DOOM3发布的时候,在它的系统配置需求就提到说,仅支持nVIDIA的显卡, ATI 的显卡无法运行DOOM3。 如果这是国产游戏,你可以将相关信息截图然后询问游戏的客服人员或技术支持人员,也许他们知道真相,但是会不会告诉你又是另一回事了。 |
|
每次遇到这种CALL 就迷糊了,lea 如何转化成mov?
004F4429 |. 8D55 E8 lea edx, dword ptr [ebp-18] ; 100690 004F442C |. 8D45 F0 lea eax, dword ptr [ebp-10] ; 0 004F442F |. E8 400EFBFF call 004A5274 ; TfrmMain_FormKeyDown lea 虽然是加载有效地址的汇编指令助记符,但多数情况用于算术运算,不过在上面的主调函数中,应该确实是 加载有效地址。 例如,将 [ebp-18]的地址加载到edx中,将 [ebp-10]的地址加载到eax中,这是为调用地址 004A5274 处的函数前,做好传递参数的准备,两个参数的地址现在位于edx与eax中,照理讲,还需要将2个参数压栈,即 push [edx] push [eax] 这样,被调函数才能正确接收到参数,但是在楼主的输出信息中没有看到上面两条指令,可能是编译器出于性能优化的原因而省略了, 注意上面的 push [edx] ,这种格式为“存储器引用”,因为lea的关系,现在edx中保存的是注释中100690的地址,要取得该地址处的值,即100690,就需要存储器引用才能取值(如果你确定被调函数接收的参数确实是类似100690的值) 上面的汇编指令如果用 mov 来改写,应该如下: mov edx, dword ptr [ebp-18] ; 100690 push edx ; 第二个参数先压栈 mov eax, dword ptr [ebp-10] ; 0 push eax ;第一个参数压栈 call 004A5274 ;TfrmMain_FormKeyDown 当然,由于新增了2条push 指令,call指令的地址不会是 004A5274 ,具体取决2条push指令的对应机器码字节长度。 |
|
[讨论]首个中国网络“骗子”地图正式上线
印象中的360只有杀毒软件以及恶意站点的云特征库比较有用。 其实,只要自身有足够的计算机安全知识与良好的上网浏览习惯,完全不用依赖这些第三方安全防护工具。 客户端拦截软件固然有用,但设法提升自己的安全意识,在冲浪时保持清醒的头脑,理性面对你在互联网上获取的任何信息,这才是当前多数网民需要培养的素质。 |
|
[求助]求大神 帮忙解决Hack shield 问题
不客气,如果你试过另外2个办法不行,我再讲下破解流程,前提是游戏主程序没有加壳,加密或没有模糊代码,如果主程序有任何保护机制,那么破解起来也很麻烦,而且不容易成功 |
|
[分享]c++反汇编技术揭秘(百度云分享)
刚买了本实体书,不过还是非常感谢楼主,这样可以随身携带阅读 |
|
[求助]mov eax,cr0怎么用的
如5楼所言,操作系统禁止应用程序访问cr0寄存器,不知道运行在裸机上(无操作系统)的程序能否访问cr0寄存器,在实模式与保护模式间切换 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值