阅读:1845回复:13
tiamo请进
http://www.driverdevelop.com/forum/html_91189.html?1114590619
贴中 首先为softice打上int 1跟int 3得patch int 3好patch,那么多中断未用,随便找个就可以了 int 1怎么patch |
|
|
沙发#
发布于:2005-04-27 23:03
这个得从检查softice是否存在得方法上说起
int 3的检查主要是依靠softice本身提供的后门 比如boundcheck后门 mov ebp, 04243484Bh ; \'BCHK\' mov ax, 04h int 3 cmp al,4 jnz SoftICE_Detected1 nop 还有softice本身的后门 mov si,4647 mov di,4A4D int 3 jmp SoftICE_Detected2 nop 这个两个后门用精心构造的seh来处理 构造两个seh让程序跳转到两个nop的地方. 也就是softice不存在的位置 如果softice存在的话..就会走到cmp al,4和Detected2的位置 而int 1的检测方式则是利用单步调试的DPL以及windows返回的错误代码来检测的...同样要使用seh 安装了softice以后 softice会修改int 1的idt entry.让int 1这个指令能在ring 3执行 如果不装softice windows默认的idt是不能在ring 3执行int 1这个指令的... 如果在softice不存在的情况下执行了int 1这个指令, windows会返回EXCEPTION_ACCESS_VIOLATION错误 而如果softice存在的话..返回的是EXCEPTION_SINGLE_STEP 其次构造好一个seh来检测softice存在与否 call _detect _seh_handler: mov ebx, dword ptr [esp+0C] add dword ptr [ebx+000000B8], 00000004 ; eip += 4 xor eax, eax ret _detect: push word ptr fs:[0000] mov fs:[0000], esp int 01 jmp _single_step_detected <-- Single step ends up here. jmp _si_not_present <-- normal operation here. (GOOD) _si_present: nop <-- SI present ends up here 以上代码来自internet... 要点汇编功底了... 第一个call 把 _seh_handler的地址push 到stack里面 然后跳转到_detect这里 第一二行构造seh 然后执行int 1 如果你使用了softice在单步调试就会执行到第一个jmp这个很容易想 如果softice没有单步调试.但是确存在的 那个int 1这个指令的dpl是3. 根据intel手册知道这个指令在执行以后push到stack的地址是下一个指令的地址.也就是第一个jmp的地址.因为你没有单步调试 所以我们的seh handler就被调用了.在那里面eip被加了4 然后返回.继续执行的地址应该是第一个jmp + 4的地方也就是nop的位置..softice存在了.. 如果softice不存在..int 1的dpl是0,同样根据intel手册这个中断保存的现场的eip是int 1这条引起异常的指令的地址而不是他下一条指令的地址.这样seh handler执行了eip + 4以后接着执行的指令是第二个jmp 也就是softice不存在的情况.. 以上遍是两种用得非常多得检测softice存在与否得方法了. 对应int 3得检测...我们只用写一个driver hook int 3这个中断.判断一下是不是在使用softice得后门...如果是.就改变ebp或者si得值就行了..相信对你我来讲都很容易..呵呵 对于int 1得检测..更简单了..softice打开..idt执行下..把int 1得dpl改成0就行了...也就一个ee改8e... 至于在早期使用createfile检测得方法.. compuware也作反击了...瞧瞧你系统上softice现在得符合链接叫什么名字...呵呵... 不过compuware改了ntice得符号链接..却没有改vid得那个符号链接.. 不过只要softice能躲过去了..后面这些检测就小case了..你可以手动修改那些个sys文件..只不过要重新生成checksum 或者直接bpx createfilew上..然后修改那个要被打开得文件.名字改乱...呵呵 这些在作破解得行家里面只是基本功... 破解也是一门很深的学问...这点东西只是一个开头 大概就是如此...... |
|
板凳#
发布于:2005-04-28 09:45
这些都只是Ring 3的方法,如果加密在Ring 0就不好办了,如果我将Int 1,Int 3都作为我的检测使用,Int3 不行了可以换一个,但int 1没法换,如果int 1中我做了一些大循环多出口的决策下一个指令将是哪里,而且我用时钟中断随时检测,那又怎么办,随时冲洗DR调试寄存器.所以我觉得破解只是一个先入为主的概念,谁先入谁有控制权谁是主人,在Ring 0决战只是一个时机的问题,和DOS年代是一样的,谁能在最短时间内全部控制机器,谁才是胜者,这个时候有时采用的指令耗费几个执行时钟周期都非常关键,而且没有绝对的胜者,如果是针对你的方法作的,那就要失效
[编辑 - 4/28/05 by bmyyyud] |
|
|
地板#
发布于:2005-04-28 18:05
ring0最大的问题就是必须要有administrator的权限...
破解并不是那么容易的.... softice本身已经在你机器上运行了.. 那机器就可以说是属于你的了... 但是这只是一个开头... 你觉得你有耐心有能力有精力去一步一步跟踪连softice都不能正常显示的数以白万计的汇编代码么..... pushad call _next db 0xeb _next: pop eax add eax,5 jmp eax db 0xeb 就像上面的这些种代码...在softice下面显示是乱的...大部分都是错的....别说分析..就是跟踪都会让人疯掉的.. 这还是最最最最基本的花指令.... 一路跟踪下来 不用半个小时..你就烦了... 你想从bpx nt!_mmCreatepeb断点..转entry point再一步一步分析? 根本就不可能.... 所谓破解都是集中精力去找那么几个地方.. 破解反破解都一直在进步... 一个软件出来过不了多久就给破了 然后又有新的方式又出来了..过不了多久一样给破了.. 软件得破解相对比较容易 如果带上硬件狗就比较难了 如果是用单片机作得硬件狗就更加难了 如果再配合一个正确使用硬件狗的软件..破解就更更的难了 所以那些行业软件都卖很贵.....上万是平常的事... 就像当初号称是绝对没有办法破解的star force 还不就几天就个破了... 大宇最喜欢这个加密方式了...呵呵 相对的讲..破解方一直都占有优势. 主要的原因就是破解方是团结在一起的.资料基本都是公开的 而加密方就不同了...大家相互之间就不那么团结了..资料公开?那就基本不可能..... 任何的加密方式都能被破解了 只是在于破解的难度跟破解要花的时间上面... 理论上不存在完美加密算法的 只存在那种在时间空间上要花费几乎不可能的代价才能破解的算法.. 比如被广泛应用在数字签名上的md5算法等等.. |
|
地下室#
发布于:2005-04-29 09:41
md5现在已经由王小云破解,即两个小时就可以找到一个HASH碰撞.SHA1在实际中还是坚固的.加密要面对各种破解环境,所以是很难的.而且一旦搞到一个正版的,请注意这个条件,跑上一遍,就更难防止破解,因为这种情况,所有算法是没用的。我认为破解的难点主要在计算机运行的快速性和人的慢速性的差别,所以有时候,调试工具可能就不太适应,关键还得针对破解做个完全的工具,调试工具主要用于排错,而破解工具功能主要在不被发现地监视系统,这就可以达到你所说的所谓破解都是集中精力去找那么几个地方,不知你对这方面有什么研究,跟你探讨受益匪浅,分少了点,请不要在意
|
|
|
5楼#
发布于:2005-04-29 15:49
王小云的工作只是提供了一种方法快速的构造两个md5 hash相同的串而已.....离破解md5还差得很远
他现在能作到的事情就是 构造两个数据 这两个数据经过md5加密以后的结果是一样的... 注意...两个输入数据都是他构造出来的 如果我给出其中一个输入数据 要他给出另外一个拥有相同md5加密结果的输入数据 他现在还是作不到的 理论上讲hash加密的碰撞本身就是必然存在的 sha这系列的也一样... hash算法并不因为碰撞的必然存在性就受到置疑... 当初那些外行无耻的妓者吹嘘的所谓电子签名行业的大灾难并没有像他们期望的那样来到... md5算法一如既往的在被使用到各个地方... 我这个人性格就这样.. 讨论事情或许很认真.是怎样就是怎样. 但是绝对是对事不对人.. 有些时候我说话很难听... 不过我绝对没有对某个人或者某些人有任何的偏见 想当初我上大一的时候开电脑都是同学帮忙开的..偶不知道开关在什么位置.......在那以前从来都没有碰过电脑这个东西..(-.-b) 同样是一点一点学过来的... 就算是现在...我也一样很多很多东西不懂.. 至于分...呵呵..我不在意的. 进来的时候我几乎就没有看有多少分.. 你瞧专家榜上就从来都没有出现过我的名字..哈哈哈 |
|
6楼#
发布于:2005-04-29 16:24
王小云的破解当然是理论破解,这个偶懂,但是从Fedora的下载中已将MD5改为SHA1就可以看出它的威胁,如果黑客控制数以万计的肉鸡,MD5两个小时就找到碰撞已经够威胁了,而且电子签名由于是明文,只要意思吻合就可以了,不在乎多个字少个字,豆腐两碗,两碗豆腐都是一样的,这对数字签名的威胁是很大的,但对破解似乎还没那么有用,但既然Fedora的一个下载的完整性验证都改为SHA1,也值得我们注意
而且我这里具体要讨论的破解,特指先有个加密的正版,一般大规模的破解都是这样,先买一个正版。这样只要正版跑起来,那么这个就和加密算法没什么关系,就是说,加密算法在这里无用武之地 加密其实是百密不能有一疏,而解密则是千里之堤,毁于蚁穴,肯定是加密难,就是加密方相互之间再团结也不行 而破解工具功能主要在不被发现地安全地监视系统,监视要被破解的软件,这就可以达到你所说的所谓破解都是集中精力去找那么几个地方,不知你对这方面有什么研究,还请不吝赐教 |
|
|
7楼#
发布于:2005-04-29 23:45
王小云的论文他有放到网上的
你看看就知道是怎么回事情 那完全是正向的..对于破解来讲是没有什么帮助的 既便是sha系列的算法也是一样的 只要是hash算法那就一定存在碰撞. 只是要从一次碰撞里面构造出来两个产生碰撞的串是非常难的 md5的加密强度是跟你的被加密的串的复杂程度相关的 因为目前来讲没有一个算法能反推 你只能穷举. 如果黑客掌握了全世界所有的电脑然后以最高的效率进行穷举 要找到一个特定的碰撞的两个解的时间都是以亿年为单位的.. 一个纯小写字母的8位密码的明文空间都已经是 26的8次方了2088,2706,4576个组合. 如果你的机器够快 1秒钟能作100次md5运算.这需要的时间是66年. 你手上如果控制有66台机器,你能在一年的时间里面把他算出来 如果是128位的密码..如果是大小写字母混合..如果是全256个明文都使用....你可以算算就知道穷举是完全不可能的. 所以...在一个真正的高效率的反向算法出来之前 md5都是一如既往的安全的.... 很多软件得z版跟d版其实是一样的.他并不是靠两次不同的编译来完成的.比如windows操作系统.比如很多很多. 有个东西叫作\"硬件狗\"不知道你知道不知道. 那些搭配有硬件狗的软件.既便是你手头上有软件有硬件都很难把他作一个d版出来 为什么现在还是有这么多的d版出来.一个比较重要的原因就是破解跟反破解双方的对峙基本跟作软件的人没有关系. 软件开发出来然后去找个加密软件加个壳就拿出来了.或者去作个硬件狗就放出来了. 那些作软件的人其实很多都不了解破解与反破解的手段..那样作出来的软件在放破解上自然大大折扣... 如果你对破解有一定的研究.再回头去看那些反破解的公司提供的产 品...真的会有力不从心的感觉..多数时候会叫一声侥幸. 上次我破解一个预算的软件.他使用的国内著名硬件狗生产厂家提供的产品\"申思3\"...我特意下载了这个硬件产品的资料来看..这个u盘大小的硬件狗提供的功能强大到让人觉得几乎就没有办法入手. 他里面有个单片机..还有非易失性寄存器.完全就一小电脑.如果你把程序关键代码放到他里面去执行.并且合理的提供入口出口参数.让其复杂话..那就几乎没有办法去破解了.因为那个单片机里面的数据跟代码是没有办法读的..只能写.. 可惜那个软件在使用这个硬件狗的时候太简单.以至于有没有狗都没有什么分别. 读一下狗 如果结果正确就继续执行 如果错误就退出 这样的流程...也就是75改74,74改eb的过程. 反破解得全盘考虑..处处放陷阱.决不能把反破解得工作集中起来 要全面开花..这个要求相对来讲是比较高得..首先得对破解有很多得了解才行..抓住一点..不管是谁.都不可能有那个精力去完完整整得分析上百万甚至上亿行得汇编代码...如果你把反破解得精神灌输到整个程序的尽可能多的分散的角落里面.破解的工作量就是成倍的增加..随着而来的就是cracker的信心成n倍的减少.. 反破解就是得从时间上从空间上分散开.. 在时间1地点1作一个计算.但是这个结果却在离开很长时间的也离开很长距离的地点2作判断.然后在又离开很长时间的离开很长距离的地点3去读取判断结果..中途再插入有效无效的对这些中间结果的引用...这样的简单的方法就能极大的影响破解者的思路.更能极大的影响破解者的信心..如果你的程序里面交叉引用这些中间结果.到处都是的话..那破解的难度就大大的增加了. 不过现在很少有软件这么作的.主要的原因就像我上面说的那样. 许多软件的加密算法都集中在一起.而且还很简单 计算 判断 根据判断结果作跳转 像上面这种空间时间都堆在一起的程序就很容易破解 如果你把上面这个过程成空间时间上分开.分散到程序的许多角落.破解就不是那么容易了. 破解其实要比加密难很多 逆向总是很难的... 比如今天公测的shanda的网游...梦幻大陆..你可以试试看看 他是用别的软件加过一个壳...软件的名字叫asprotect 你可以试试解开看看....就知道为什么破解是个很难的事情. 我现在正在作的网络游戏一样也要涉及防外挂的问题. 其实如果是纯静态的东西那就总会被人解开. 所以我们的防外挂策略定位是在心理上..而不是技术上 让那些作破解的作外挂的作到心烦为止.. 加密算法很简单..作作异或作作移位啊什么的.. 一个熟手只用几分钟就能跟踪出来 但是用处不大... 我们的网络协议是设计成可以替换的 我常换协议.你可能刚分析出来的东西没用几天就不能用了 又得重新分析.又得花那么几分钟.然后再用个两三天 我们又换协议了... 除非你把我们得整个协议都完完全全分析透彻了.才能作出真正有用得外挂了.... 当然.你如果有足够得耐心足够得时间足够得精力 我想那数以百万计得汇编代码也不算什么..呵呵 破解这方面的经验我并不多..自己动手破过的软件严格的算下来就只2个..一个是号称能全面超过c++的却用c++来写自己的虚拟机的某编程语言的虚拟机..另外一个是某usb监视的软件. 其实破解也就那么回事情.拼的是双方的耐心.拼的是精力.其实也挺浪费时间的...你也从里面学不到多少有用的东西..不碰也罢.. |
|
8楼#
发布于:2005-04-30 09:48
其实作为加密算法,就是它的不可逆性,而且算法的强度主要在其不可逆的强度,否则就不叫加密算法了.
至于这个 上次我破解一个预算的软件.他使用的国内著名硬件狗生产厂家提供的产品\"申思3\"...我特意下载了这个硬件产品的资料来看..这个u盘大小的硬件狗提供的功能强大到让人觉得几乎就没有办法入手. 他里面有个单片机..还有非易失性寄存器.完全就一小电脑.如果你把程序关键代码放到他里面去执行.并且合理的提供入口出口参数.让其复杂话..那就几乎没有办法去破解了.因为那个单片机里面的数据跟代码是没有办法读的..只能写.. 我觉得任何加密狗其实都是一样的,除非你把它的其中的单片机做得和计算机CPU一样强大,所有软件功能都固化在其中,但这又有违加密的初衷和成本问题. 不管你将关键代码放到他里面去执行,对计算机来讲,它总是外设,而不是主人,总得和主人通讯以交换数据,而主人也不可能无穷地变化下去,它不可能有无穷种组合.有多少关键代码在狗中执行,破解就有多大的难度,因为你其实要的软件功能是在计算机上的CPU实现的,而不可能在加密狗中,所以不管你怎么样,你即便做个算法在软件狗中,决定下一条指令在哪,也没用,关键是你的软件功能主要还是靠x86的CPU运行的,不是在加密狗中实现的. 至于 我现在正在作的网络游戏一样也要涉及防外挂的问题. 其实如果是纯静态的东西那就总会被人解开. 所以我们的防外挂策略定位是在心理上..而不是技术上 让那些作破解的作外挂的作到心烦为止.. 加密算法很简单..作作异或作作移位啊什么的.. 一个熟手只用几分钟就能跟踪出来 但是用处不大... 我们的网络协议是设计成可以替换的 我常换协议.你可能刚分析出来的东西没用几天就不能用了 又得重新分析.又得花那么几分钟.然后再用个两三天 我们又换协议了... 除非你把我们得整个协议都完完全全分析透彻了.才能作出真正有用得外挂了.... 当然.你如果有足够得耐心足够得时间足够得精力 我想那数以百万计得汇编代码也不算什么..呵呵 其实加密主要是对付解密者的心态,拖垮解密者,这其实比技术要重要得多,大循环多出口就是这样一种比较原始这样的方法.这点我非常赞同.这正如我所说的 [重要]破解的难点主要在计算机运行的快速性和人的慢速性的差别 所以破解的突破主要在于用计算机代替人来分析,这就在于破解工具的改进,提高速度,由于你只是换协议,你的客户端的软件整体架构不会有很大的变化,一旦针对你的软件,将可变的部分剥离出来,让计算机自动介入分析,这样相当于把注册机的外延扩大了. 而且如果做个能不动声色监视系统的破解工具,那么根据你的正版模拟一个全真的系统,类似虚拟机,做成一个你的游戏的虚拟机,你又如何分辨真假,所以理论上只要有个跟你规模一样强大的破解团队,那么就没有什么做不到的,而且你还得做额外的游戏设计的工作,反外挂也仅能算是附带工作,这其实反而涉及到解密不能团结的问题,都是只能在地下,规模受到影响的问题.还有现在唯一可以对加密有用的是由于网络的存在,软件可以有一部分运行在服务器端,这部分可以想象为是物理上可靠保密的,而不象以前所有部分完全在破解者环境下运行. |
|
|
9楼#
发布于:2005-05-01 16:51
没有一个加密算法是靠逆向破解的,都是正向去验证,正向验证,大家的速度是一样的,如果论排列组合这样暴力去试,则肯定需要时间太长,破解56位RSA花了大概两年半的时间,王小云关键是找到这些HASH加密算法的分布规律性,这样就可以将密文的原象缩小到相当小的范围内,以至于在这个范围内可以一个个的验证,所以其实两个小时找到特定的HASH碰撞已经是太快了,但是主要是找到的这个到底是否合乎要求,如果原象是bmyyyud,而找到的碰撞的原象是菜鸟那完全可以理解,若找到的是抽水马桶,就难理解了,但更多数的情况找到的却是乱码,破解Windows 2k的密码的时候,其实就是这种方法,如果原象是乱码,就认为不对,如果原象是人可读的,则认为找到了密码
|
|
|
10楼#
发布于:2005-05-02 22:38
bmyyyud上看雪了,霍霍。。
|
|
|
11楼#
发布于:2005-05-02 22:44
正在浏览此论坛的朋友:
leozem, prince, 我来顶也, zhouyu, qdijiale, liuxianfu, dssz, fcrjzmd, woyaozhuce, bmyyyudong, machoman |
|
|
12楼#
发布于:2005-05-03 11:31
正在浏览此论坛的朋友: 其实那不是偶,因为看雪不能注册了,我就把我以前注册的用户给了偶的学友,嘻嘻,看雪里面的工具太旧了,还是这里的新 |
|
|
13楼#
发布于:2005-05-10 13:11
看雪是块好地方
|
|
|