关于BCE中级会计师考试时间考试的准备,希望专业人士给点意见

在五天内准备教师招聘考试小学语文说课,限时10分钟,希望有经验的各位给点意见,如何准备?_百度知道
在五天内准备教师招聘考试小学语文说课,限时10分钟,希望有经验的各位给点意见,如何准备?
我比别人整整少了11分,但是没过,笑容不够开朗,如何改进自己,有过面试机会,如何准备,要把小学的每篇课文看一次吗?面试时准备时间是15分钟。但是我不知道我的不足在哪我参加教师招聘考试,要注意什么,在面试时候如何打动评委。可能是声音不够大?希望具体点。我想请教一下
提问者采纳
突破难点的方法所在。希望能帮到你,慌了什么都想不到了我没有过这样的经历,以及你突出重点、教学重难点,但首先肯定要镇静,祝你成功。说课一定要抓住教学内容
其他类似问题
为您推荐:
教师招聘考试的相关知识
其他3条回答
如何准备?面试时准备时间是15分钟?希望具体点在面试时候如何打动评委,如何改进自己,要注意什么,要把小学的每篇课文看一次吗
说课最主要的环节是,要表达自个为什么这么教的思想!这才是说课的核心问题,也是考核你教学能力的关健所在。
最好是把你相关学科的教材全找来看下。因为说课过程中抽题是随机的。他考你的就是教学能力。但如果你教学能力强,方法得当,也不是非要全找来的,找些重点课文,典型的有代表性的
偿试写写教学说课稿,网上也有些资源,可以找来,对比下,你写的,和人家写的,有什么优缺点。
说课考的就是,教材熟悉程度,教育理论知识的积累,口语表达及应变思维能力!
多熟悉教材,学会编写有质量说课教案。这是最基本的。这个把握好,成功一半啦!
然后,口语表达能力,也是关健,声音洪亮,重音要分清。别人家听完,都不知道你说什么。
会表达的人,说话,能找准关健字。 几个字就解决问题。
说课的目的是展现你的教学方式方法,怎样抓住教学的重难点,又怎样去攻克它
说课最主要的环节是,要表达自个为什么这么教的思想!这才是说课的核心问题,也是考核你教学能力的关健所在。
最好是把你相关学科的教材全找来看下。因为说课过程中抽题是随机的。他考你的就是教学能力。但如果你教学能力强,方法得当,也不是非要全找来的,找些重点课文,典型的有代表性的
偿试写写教学说课稿,网上也有些资源,可以找来,对比下,你写的,和人家写的,有什么优缺点。
说课考的就是,教材熟悉程度,教育理论知识的积累,口语表达及应变思维能力!
多熟悉教材,学会编写有质量说课教案。这是最基本的。这个把握好,成功一半啦!
然后,口语表达能力,也是关健,声音洪亮,重音要分清。别人家听完,都不知...
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁小站会根据您的关注,为您发现更多,
看到喜欢的小站就马上关注吧!
下一站,你会遇见谁的梦想?
╔------------------------------------------------╗&┆&&&&&&&&&&&&&&渗透,破解,脱克,加密……&&&&&&&&&&&&&&┆&&&&&&我很菜,但我一直&坚持!独自等待……&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&╚------------------------------------------------╝&
汇编语言(第二版)---爽哥 著---第三章 寄存器(内存访问)上
& & & 天气还是这么热,真心不爽,接着搞第三章。这本书一共17章最后加个综合研究,一共还得18章,争取再我大学毕业前,都写完。再俩周就开学了,前天把课也选了,废话不多说了。& & &3.1 &内存中的字储存& & &记得第二章中说过字的概念,再复习一下,字和大家熟悉的GB,MB一样,都是记忆体的容量度量单位,1个字(1个WORD)=2个字节(2个BYTE)=16位(16Bit),大概就是这样。1位可以想象成是内存中的一个位置,一个小格子。下面说一下,内存单元的概念。一个内存单元其实就是一个字节。所以,一个字就需要俩个连续的内存单元来存放。还有就是高低位的概念,8086CPU的低位就是前面那位,后面那位就是高位。& & &3.2 &DS和[address]& & &CPU要读取一个内存单元的时候,必须给出这个内存单元的地址,在8086PC中,内存地址是由段地址和偏移地址组成。而这个DS寄存器,通常用来存放要访问数据的段地址。而偏移地址呢就放到了这俩个框之间[...],具体来一段代码。mov bx,1000H&mov ds,bxmov al,[0]&上面三条指令相当于将10000H(1000:0)中的数据读取到al中。这块我开始不是太明白,觉得这个ds和之前的cs,ip寄存器有点类似,后来明白的cs,ip的功能是cpu当前执行的指令的内存地址,而ds和[address]组合是当前要读取的数据的内存地址,所以类似但不同。我的个人理解,不知道对否。& &3.3 &字的传送& &关于mov指令,因为8086CPU是16位结构,有16根数据线,可以一次性传送16位数据,也就是一次性传送一个字。所以每次要看的是2个字节,一个就是一个内存单元,需要俩俩的看,而不是一次传送一个字节。有点乱,自己理解吧。& &3.4 &mov,add,sub指令& 略,没啥要说的。& &3.5 数据段& 对于8086PC机,再编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将一组长度为N(N&64KB),地址连续,起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义了一个数据段。如需访问数据段中的内容,那么用ds存放数据段的段地址,再根据需要用相关指令访问数据段中的具体单元。累加内存地址为123B0的前三个字节举个例子:mov ax,123BHmov ds,axmov al,0add al,[0]add al,[1]add al,[2]今天就这么多,剩下的下次说吧。
最新成果pptv去广告loader
pptv40多秒的广告着实让我很是蛋疼,做了个工具,去掉了,侧边栏的没有去,还是别太绝了。
有需要的联系我。
vc的收缩功能
&& 闲的蛋疼,就又写了个小工具,学校的网站乱七八糟的记不住,又写了一个。之前是用vc单文档写的,很垃圾,最近新学了点,所以从用对话框写了一个。想说的是如何设计一个按钮可以实习收缩和扩展功能。先上个图,然后上源码。&
其实就是一个收缩功能的实现。void CMyDlg::OnButton9() //扩展按钮{&// TODO: Add your control notification handler code here&&CS&if(GetDlgItemText(IDC_BUTTON9,str),str=="&&")&{&&SetDlgItemText(IDC_BUTTON9,"&&");&}&else&{&&SetDlgItemText(IDC_BUTTON9,"&&");&}&static CRect rectL&static CRect rectS&&if(rectLarge.IsRectNull())&{&&CRect rectS&&GetWindowRect(&rectLarge);&&GetDlgItem(IDC_SEPARATOR)-&GetWindowRect(&rectSeparator);&& &&&& rectSmall.left=rectLarge.&&rectSmall.top=rectLarge.&&rectSmall.right=rectSeparator.&&rectSmall.bottom=rectLarge.&}&if(str=="&&")&{&SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),&&&SWP_NOMOVE | SWP_NOZORDER);&&}&else&{&&SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),&&&SWP_NOMOVE | SWP_NOZORDER);&}&}&
汇编语言(第二版)---爽哥 著---第二章 寄存器
&&&&&&& 上次写这个第一章好像是n个月前的事情,今天开始搞第二章。废话不多说。&&&&&& 一个典型的cpu都是由运算器,控制器,寄存器等器件构成,这些器件是靠内部总线相连的。这个总线不是我们平时说的电脑的总线是内部总线,简单点说就在cpu那个房片子里面。我们平时说的总线是也就是外部总线,是cpu和主板上其他器件连接用的。&&&&&& 运算器--信息处理&&&&&& 寄存器--信息储存&&&&&& 控制器--控制各种器工作&&&&&&&内部总线--各种器间的数据传送&&&& 为啥先学寄存器,是因为寄存器是用来储存的,就好像人类大脑的记忆模块。&&&& 由于不同的cpu,寄存器是不一样的,我所说的是8086cpu。不懂的可以baidu。8006cpu一共有14个寄存器,名字各不相同。分别是AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。
1,通用寄存器&&& AX,BX,CX,DX这4个叫通用寄存器,用来存放一般性数据。而且8086cpu的寄存器都是16位的,关于位这个概念,我想这里插一下介绍一下计算机数据单位的概念。神马是位?位用英文说就是bit,1bit就是8分之1字节,字节是byte,我们平时说的kb就是千字节,这个千是1024不是正好1000,再往大说就是mb了这个我想大家基本都知道,再往上就是GB,TB神马的估计大家也都了解了。所以说到底这个位就是数据大小的单位,只不过小了点。越小的东西一般都越抽象越不好理解,因为我们的眼睛不是显微镜,看不见,看不见所以就没概念,其实不用纠结,你可以把一位想成一个很小的纸箱子,16位,自然就是16个纸箱子,不过需要把他们放的整齐一点,连续的放成一个1字,有这么个概念就可以了。我们平时计数习惯用1来开始,而计算机习惯从0开始计数,而且喜欢倒着来,所以如果给这16个纸箱子编号的话就是从15一直到0,这样来编号。其中15到8叫高位,7到0叫低位。所以还可以这样细化表示AX,就是AH表示15-8,AL表示7-0,各8个位置。(其中H就是High,L就是Low大家都懂的)。BX,CX,DX同理啊。&&& 这里再补充一下刚才说的单位,这个字节(byte)之后比kb还小的单位还有的,这个单位的名字就叫&字&,1&字&= 2 字节,这个&字&用英文表示就是word,还有双字就是DWORD,就是4个字节,d就是double都懂得。&&& 下面说2个简单的汇编指令一个是mov,另一个是add。&& mov ax,123D&& add ax,2&& 这里的123D和2都是16进制的,不懂16进制的可以baidu或者看我以前写的。&这个mov ax,123D就是把123D这个数据放到ax寄存器里面,可能有人会说你刚才说ax是16个纸箱子,这个123D咋放进去,其实很简单把他转换成2进制然后从右往左放剩下的纸箱子里面放个0就可以了。这个add就是把ax当前值加上2再放到ax里面就好比c语言的a=a+2;或者a+=2;就是这样。
2,cs和ip寄存器&&&&&& 这里的cs不是反恐精英和ip地址。是cpu的俩个寄存器,这个cs是一个段地址寄存器(总共4个还有DS,SS,ES)。ip是指令指针寄存器,其实里面放的是偏移地址。& 这里还需要说一下,cpu是如何选择物理地址的,其实物理地址的地址,就等于段地址*16+偏移地址。物理地址=段地址*16+偏移地址这个*16其实就是把段地址转换成16进制左移1位,左移动一位所的通俗点就是在数字结尾加个0。100左移1位就1000。cs*16+ip的值就是cpu当前要执行的机器码的地址,就好比我们的思维一样告诉我们下一步要干神马,打游戏还是搞机。
3,debug&&&&& 这个debug是神马,貌似和今天的寄存器没有多大关系。其实这个debug是个DOS,Windows都提供的实模式(8086方式)程序的调试工具。至于甚是个实模式大家可以baidu,我只知道8086cpu貌似有3个工作方式。这个工具在哪了,其实我也是知道不久。玩dos的时候没人告诉我,所以我也不知道。大家可以在运行里面输入CMD,然后再输入debug,然后回车就可以了。debug有个好处就是打命令的时候我们不用输横杠了,他每行都一个横杠,呵呵。R 查看改变cpu寄存器内容想改谁就R谁,记不住可以改日。(rax,rbx,rcs呀rip呀都行)D 查看内存中的内容例子:D 1000:0 查看内存地址为10000中的数据内容,默认是显示128字节的内容1000其实就是cs 0就是ip如果有显示的要求 可以D1000:0 F,表示显示从10000开始的往后16个字节的内容E 改写内存中的内容例子:E
1 2 3 4 5 6 7 8 9 从10000地址写入0 到9 10个字节的数据可以配合d命令查看的,还有就是E命令可以写字符和字符串,不过需要用单引号引起来。U 机器指令翻译成汇编指令T 执行一条机器指令 (默认的cs和ip地址开始,如果有要求可以用上面的日命令改cs和ip的值)A 以汇编语言的形式在内存中输入1条机器指令debug一共20多个命令,常用的就这这6个,以后介绍个P命令。今天就这么多了,晚安了。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CRACKME系列 难度由0--9(CM00练手笔记)
这个是CM作者的原贴,有兴趣的同学可以看一下。
标 题:&【原创】本人原创CRACKME系列 难度由0--9,看你属于哪一级? (更新CRACKME 7的程序实现,附源码)
作 者:&zenghw
时 间:&,18:26:52
链 接:&/showthread.php?t=93936&&& & & &放假了,有空上论坛逛逛,发现这个帖子不错,下来搞搞,这个到了后面会很难,不过有作者的源码,分析起来很容易。今天 先搞crackme01,先把作者的源码贴上来分析。目标程序:
&UpdateData(true);
&//判断注册名是否大于6且序列号长度小雨100000,不对则调用MessageBoxA提示
&&if(m_Name.GetLength()&6&&&&&m_Serial&&100000)
&&&&AfxMessageBox("Name&or&Serial&is&too&short!");
//典型的明码比较,如果注册名是 IndolentAfternoon&且序列号是 5687255则提示成功
&&if(m_Name&==&"IndolentAfternoon"&&&&m_Serial&==&5687255)
&&&&AfxMessageBox("Congratulation!&Correct&Serial&Num,do&next&one?&:)");
&&&&OnOK();
先peid查克
vc++ 7.0,无壳。
直接od载入&
00401A5D & $ &6A 74 & & & & push 0x74&
00401A5F & . &68 203A4000 & push CRECKME_.00403A20&
00401A64 & . &E8 F3010000 & call CRECKME_.00401C5C&
00401A69 & . &33DB & & & & &xor ebx,ebx&
00401A6B & . &895D E0 & & & mov dword ptr ss:[ebp-0x20],ebx&
00401A6E & . &53 & & & & & &push ebx & & & & & & & & & & & & & & & & ; /pModule =& NULL&
00401A6F & . &8B3D
mov edi,dword ptr ds:[&&KERNEL32.GetModu&; |KERNEL32.GetModuleHandleA&
00401A75 & . &FFD7 & & & & &call edi & & & & & & & & & & & & & & & & ; \GetModuleHandleA&
00401A77 & . &66:A &cmp word ptr ds:[eax],0x5A4D&
00401A7C & . &75 1F & & & & jnz XCRECKME_.00401A9D&
00401A7E & . &8B48 3C & & & mov ecx,dword ptr ds:[eax+0x3C]&
00401A81 & . &03C8 & & & & &add ecx,eax&
00401A83 & . &0 cmp dword ptr ds:[ecx],0x4550&
00401A89 & . &75 12 & & & & jnz XCRECKME_.00401A9D&
00401A8B & . &0FB741 18 & & movzx eax,word ptr ds:[ecx+0x18]&
00401A8F & . &3D 0B010000 & cmp eax,0x10B&
00401A94 & . &74 1F & & & & je XCRECKME_.00401AB5&
00401A96 & . &3D 0B020000 & cmp eax,0x20B&
00401A9B & . &74 05 & & & & je XCRECKME_.00401AA2&
00401A9D & & &895D E4 & & & mov dword ptr ss:[ebp-0x1C],ebx&
00401AA0 & . &EB 27 & & & & jmp XCRECKME_.00401AC9&这个入口略不像vc啊,没见过,但确实是vc的。&
然后直接查找ASCII码:
直接双击,然后向上翻页到断首,下面分析代码。&
& . &56 & & & & & &push esi&
& . &57 & & & & & &push edi&
& . &6A 01 & & & & push 0x1&
& . &8BF1 & & & & &mov esi,ecx&
& . &E8 6B030000 & call &jmp.&MFC71.#6236&&
004015AB & . &8D7E 74 & & & lea edi,dword ptr ds:[esi+0x74] //edi指向我们输入的假码&
004015AE & . &8BCF & & & & &mov ecx,edi&
& . &FF15 D0314000 call dword ptr ds:[&&MFC71.#2902&] & & & ; &MFC71.#2902&
& . &83F8 06 & & & cmp eax,0x6 //注册名是否大于6位&
& . &7D 1A & & & & jge XCRECKME_.&
004015BB & . &817E 78 A0860&cmp dword ptr ds:[esi+0x78],0x186A0//注册名是否小于100000,
& & & & & & & & & & & & & & & & & & & & & & & & & //&0x186A0是16进制,转成10进制就是100000&
& . &7D 11 & & & & jge XCRECKME_.&
& . &6A 00 & & & & push 0x0&
& . &6A 00 & & & & push 0x0&
& . &68 8C394000 & push CRECKME_.0040398C & & & & & & & & & ; &Name or Serial is too short!&
004015CD & . &E8 3E030000 & call &jmp.&MFC71.#1123&&
& & &5F & & & & & &pop edi&
& . &5E & & & & & &pop esi&
& . &C3 & & & & & &retn&
& push CRECKME_. & & & & & & & & & ; &IndolentAfternoon&
004015DA & . &8BCF & & & & &mov ecx,edi&
004015DC & . &FF15 C0314000 call dword ptr ds:[&&MFC71.#1482&] & & & ; &MFC71.#1482
& & & & & & & & & & & & & & & & & & & & & & & & & & & //Compare,跟进去可知为比较函数
& . &85C0 & & & & &test eax,eax & & & & & & //eax为返回值,如果相等为0,不等为1
& .^ 75 EC & & & & jnz XCRECKME_. & //注意这个跳是往上跳的&
& . &817E 78 D7C75&cmp dword ptr ds:[esi+0x78],0x56C7D7 //esi+0x78是假码,比较假码和5687255是否相等。16进制0x56C7D7转成10进制是5687255。
004015ED & .^ 75 E3 & & & & jnz XCRECKME_. &&//注意这个跳也是往上跳的,如果这俩个跳都不跳自然往下就提示成功了。&
004015EF & . &6A 00 & & & & push 0x0&
& . &6A 00 & & & & push 0x0&
& push CRECKME_. & & & & & & & & & ; &Congratulation! Correct Serial Num,do next one? :)&
& call &jmp.&MFC71.#1123& & //自然是调用MessageBox了&
004015FD & . &8B06 & & & & &mov eax,dword ptr ds:[esi]&
004015FF & . &5F & & & & & &pop edi&
& . &8BCE & & & & &mov ecx,esi&
& . &5E & & & & & &pop esi&
jmp dword ptr ds:[eax+0x154]
好了今天就这么多了,慢慢更新。
【转自看雪】 OD脱轩辕剑五-StarForce
&OD脱轩辕剑五-StarForce
标 题:&OD脱轩辕剑五-StarForce
作 者:&DonQuixote
时 间:&,19:48:12
链 接:&/showthread.php?t=30446
?蘩?伍:一?凌?山海情
PEiD探壳:StarForce&V3.X&-&&StarForce&Copy&Protection&System&[Overlay]&*
?蘩?伍繁体CD版是可以通过双机模拟iSCSI绕过STARFORCE的(参考游侠网上文章),脱壳前要先能双机进游戏,或者如果有正版也行
安装完后先观察目录,所有文件包括动画都有,而且只要一开始通过了StarForce验证后,即使拿出盘也可以玩,这就是说只要脱了壳就可免CD
OD加载swd5.exe,还没见到入口就挂了
注意游戏目录下有个文件binkw32.dll,这个显然是播放BIK动画的STARFORCE再流氓总不能程序异常出错连个非法操作也不跳出来吧?抓住这个问题就可以把OD载进去先修改binkw32.dll中有个函数_BinkOpen(从名字可以猜出来播放动画肯定要调用它),在此函数入口加个int3运行游戏,一放开场动画果然非法,事先把OD设为默认调试器,这个时候点调试就可以乘虚而入了
大概调了一下发现F8,F7是不行的,会被SF发现,不过既然SF买int3的帐,当然就可以F2+F9,这样和F8也差不多,只是麻烦一点
利用binkw32.dll断下来后就可以DUMP了,抓下来IDA一看,没想到代码居然没有变过型,入口很清楚,就在0065D00E处,而且IDA还可以把VC库函数都识别出来,SF在这方面倒是挺安分的...
但这不是在OEP脱的,为什么非要在OEP呢?因为在OEP时全局变量没有被动过,这是非常重要的举个例子,以上在binkw32.dll中断所DUMP的文件,即使把OEP,IAT修复还是会出错,这个错误出在EnterCriticalSection,因为VC的启动代码会初始化一个临界区全局变量,就是mlock.c中的PCRITICAL_SECTION&_locktable[_TOTAL_LOCKS],而上面所DUMP文件中这个量并非为0,因此启动代码会认为已经初始化,从而跳过初始化过程,所以EnterCriticalSection时传递的就是无效临界区程序一旦经历了后面的代码,全局变量也就不同了,人一旦经历了有些事,也就不再是原来那个人了,现在的尔玛再回山里放羊又焉能心境淡远如初?所以这么DUMP是不行的,就算可以把引起异常的变量都一一修复掉,那些不会引起异常的逻辑错误又怎么办?有些内在的东西一旦变了,不是那么容易就能变回去的
所以还是要在OEP处DUMP,OD根本无法在调试状态下运行游戏,怎么停在OEP呢?别忘了SF发现没放光盘还会提醒放入后重试,乘此良机又可钻进去:先拿出光盘,运行swd5.exe,此刻kernel32.dll等文件都已经加载到内存,用WinHex编辑内存,修改GetVersion最后一行ret为CC,我的机器上这个地址是7C8114DB,然后放入光盘,点重试,SF是很给CC面子的,于是乖乖的在GetVersion非法此时DUMP的文件只要修正下入口点就算是在OEP处DUMP的了
然而IDA载入后却发现很多库函数都残废了,只有到运行时SF才会补上代码,想要精神和肉体都同时不受束缚怎么可能?现实总是充满矛盾幸而在CPU里发生的事没有那么残酷,两全其美还是可能的binkw32.dll处DUMP精神残废肉体健全,GetVersion处DUMP肉体残废精神正常,既然如此不妨各取其完好的地方重新拼装一个:VC的全局变量段在IDA里很好识别的,swd5.exe的变量段就是006BD000处大小为297000的_brick段将OEP处DUMP文件中的这个段保存下来并复制到binkw32.dll处DUMP的文件,这个文件就同时具有正确的代码和变量
但它仍然不健全,开两个OD加载DUMP的文件和在停在GetVersion的文件,打开内存镜像对比,会发现DUMP的文件少了很多快内存段这些内存段是SF动态申请的,每次地址都不同,我脱壳时这种内存有57块,地址从200000,大小各不相同,,40000...这些里面放的是SF初始化后的变量,大概是用了SDK的原因,因为全局变量中有指向这些动态内存的指针,试想在OEP时什么都没运行,怎么会有静态指针指向动态数据?可能的解释只能是一部分变量由SF初始化(这里面包括当前的游戏目录字符串)
这样的话只好写个loader修复了,内存段太多,不可能全保存到exe里,我写了个由ini配置文件载入段的loader,在附件中在OEP处将57个段保存下来并DUMP修复全局变量段,同时保存IAT(addr=00697FFC&size=340)这时用loader先载入内存段,加CC中断在OEP,再用OD载入调试,再载入IAT,这时F9已经可以免CD运行游戏了,SF所HOOK的IAT指向了那57个内存段,虽然没有识别出来,不过运行是没问题的
IAT没有识别毕竟遗憾,但这时的程序已经脱离了老流氓的魔抓,可以用OD正常调试,要修复IAT还会难吗?imprec分析后大概有20多个函数未知,用OD载入一一修复,这些函数是SF模拟了部分系统代码,对比一下还是容易识别出来的比如这个IAT干脆没有调用任何API,不过其中有一行指令shrd&eax,edx,18只要在kernel32.dll模块中搜索这个指令很容易发现就是kernel32.GetTickCount再比如006980FC壳代码有一行mov&eax,dword&ptr&ds:[7C88303C],搜索此行发现是IsBadReadPtr后面有个把API指令不怎么特殊,搜索不管用了,可以让OD分析user32.dll,kernel32.dll,然后call到系统DLL里时根据交叉参考分析出来比如这个IAT,壳代码先调用了77D184D0,进入user32.dll,OD中间的窗口显示有所有call到这里的来源,点开"显示全部跳转和局部调用"那个窗口,一一查看,因为壳代码调用完77D184D0接着就调用了77D1B65A,所以只要看哪一个下面有call&77D1B65A,很快就发现这是GetClientRect比较邪的就是HeapAlloc/HeapFree这两个函数,如果系统是XP直接定向到ntdll里,在kernel32.dll里干脆没这个符号(感谢blackthink,DiKeN,Erika,bbbsl几位朋友的帮助)另外,有好几个函数在IDA里可看到有库函数调用,这就更容易,只要打开VC6的库函数代码对比一下就发现了附件中有一个完整的IAT
修完IAT后可以不用OD载入,直接用loader载入内存段就能运行,进一步处理懒得弄了(游戏目录被定死)
轩辕剑5是个好游戏,在大陆上市了我肯定会买正版的,如今象大宇这样还在做单机RPG的公司不多了,而且简体版马上要在大陆发行,各位朋友要是做出免CD补丁,烦请别放到网上,以保护正版
DonQuixote[CCG][iPB]Email:DonQuixote@mail.
这学期最后一次编程课完了,我算学完了c.
【转自看雪】破解StarForce之一:StarForce分析总览篇
原帖地址: /showthread.php?t=52033
标 题:&【原创】破解StarForce之一:StarForce分析总览篇
作 者:&menting
时 间:&,20:02:03
链 接:&/showthread.php?t=52033
关于防拷系统研究破解心得:
/*------------------------------------------------------------
&&&&&&&&&&&&&&&&第一部分&&&&&综合看防拷系统
/*------------------------------------------------------------
&&要破防拷的人越来越多,而破的人几乎很少,这个程序有点霸道,所以,我很讨厌它.又看到了这样的信息:
//下面的内容是转载:
1.SF会安装在第0轨,也就是系统层,此後,除非format或用特殊方式,不然SF无法移除乾净。&&&&
2.SF会取得硬体资源最高控制权,无论是否在进行游戏,永远、随时的监控你的电脑。&&&&
3.SF会经常性读取光碟机,防止有人从该处动手脚,但这样拼命操的後果就是,光碟机损坏率大幅提升。&&&&
4.SF会避过window安全机制,暗中置换USB、1394等系统档,且永远无法修复,即使在安全模式都无法改回原样,
&&这种动作同等於病毒所为。&&&&
5.SF监视下,若发现虚拟、盗版相关,有时为防止其正常运作,会造成当机。&&&&
6.SF持续蒐集电脑内所有资料,若SF运作过程中发生错误,会将电脑完整资讯传回给SF设计公司,这资料的内容
&&达3千7百多行,里面包含私人资料。&&&&
7.美国已禁止使用该软体,且Ubisoft,绝冬城之夜2,银河文明2等都声明不再使用SF软体了。&&&&
8.银河文明2声明不使用後,在该公司官方讨论版上,遭到SF设计公司的攻击,甚至恶意散布银河文明2的下载点,
&&使其知道盗版的利害。&
&&无论以上内容是否为真,我无从考证,宁可信其有,也不要相信没有,我至少看到了400KB左右的系统报告,
大致看了看,几乎对你的电脑进行了体检,没有你电脑上不被记录的.
我们先来看看这个被命名为:report.txt的文档里都有什么?
/*----------------------------------------------------
下面是未知序列号,这个到没什么的:
[Support&Information&Collected]&
MYTMZH-TQBLYD-HRGT59-VLSNW3
B,&D,&F,&1A,&0,&0,&0,&0,&0,&0,&0,&0,&0,&0,&0,&0,&
接下来是你的错误报告时间等.也没什么!在下面就是你系统信息:
[System&Information]&
系统名称:&XX
[系统摘要]
项目&&数值&&
OS&名称&&Microsoft&Windows&XP&Professional&&
版本&&5.1.2600&Service&Pack&2&内部版本号&2600&&
OS&制造商&&Microsoft&Corporation&&
系统名称&&XX&&
系统制造商&&XXXX&&&&&&//这个是我电脑的制造商
系统模式&&XXXXXXXX&&&&//电脑的生产序号&&
系统类型&&基于&X86&的&PC&&
处理器&&&&&&&&&&XXXXXXXX&&&&//我处理器
BIOS&版本/日期&&XXXXXXXX&&&&//BIOS&&
SMBIOS&版本&&2.31&&
Windows&目录&&C:\WINDOWS&&
系统目录&&C:\WINDOWS\system32&&
启动设备&&\Device\HarddiskVolume1&&
地区&&中华人民共和国&&
硬件抽象层&&版本&=&"5.1.&(xpsp_sp2_rtm.8)"&&
用户名称&&MG\Silly&&
时区&&中国标准时间&&
总的物理内存&&XXXXXX&MB&&
可用物理内存&&XXXXXX&MB&&
总的虚拟内存&&XXXXXX&GB&&
可用虚拟内存&&XXXXXX&GB&&
分页文件空间&&XXXXXX&GB&&
页文件&&C:\pagefile.sys&&
//我把我相关的都"XXXX"代替了.大家不信可以自己统计.
/*-------------------------------------------------------------
下面是硬件设置,有什么硬件一请二楚,大家自己看看就明白.十分的详细.电脑上的所有硬件都会被详细统计,没有一个
不被统计的,无论相关与不相关都会被记录.
当然硬盘最关键了,我看了看有详细的分区信息和你硬盘的厂商及序列号.还有关于硬盘的所有其它信息,我想除了温度
没有不被统计的.
再下来就是你装的系统驱动,能用的不能用的都被统计.
再下来是系统环境变量,下面是做的部分进程统计:
/*---------------------------------------------------------------------------------------
[正在运行任务]
名称&&路径&&处理&ID&&优先顺序&&最小工作设置&&最大工作设置&&开始时间&&版本&&大小&&文件日期&&
system&idle&process&&不可用&&0&&0&&不可用&&不可用&&不可用&&不可用&&不可用&&不可用&&
system&&不可用&&4&&8&&0&&1413120&&不可用&&不可用&&不可用&&不可用&&
smss.exe&&c:\windows\system32\smss.exe&&672&&11&&1-9-20&13:32&&5.1.&(xpsp_sp2_rtm.8)&&49.50&KB&(50,688&字节)&&&0:00&&
csrss.exe&&不可用&&388&&13&&不可用&&不可用&&&13:34&&不可用&&不可用&&不可用&&
winlogon.exe&&c:\windows\system32\winlogon.exe&&508&&13&&1-9-20&13:34&&5.1.&(xpsp_sp2_rtm.8)&&476.00&KB&(487,424&字节)&&&0:00&&
......................
/*-----------------------------------------------------------------------------------
当然还有进程模块.系统服务的统计,那些开启,那些没开,标的很清楚.
服务完了就是程序组,安装了什么程序一看都在里面吧!自启动程序都也被狩猎.跟杀毒软件一样的,很全一样没少没漏!
OLE注册信息,系统错误报告.
网络设置被统计了IP地址安全设置等等.
除了你的系统用户名和密码外,几乎都被统计了.
/*------------------------------------------------------------------------------------
看完上面的也许,大家觉得罗嗦!实际也没什么的.那我无话.如果,电脑可以被统计的如此详细那么,它统计你的帐号密码也不是没什么问题.也许我说的很片面,如果觉得我说的有点道理的,就支持一下!如果觉得是无聊瞎说,就当个乐呵!
/*-------------------------------------------------------
&&&&&&&&&&第二部分&&防拷系统的实现分析
/*-------------------------------------------------------
提到这个分析我们必须对两类知识有了解.第一类:PE结构,第二类:WINDOWS机制
/*-----------------------------------
看上面最开始的问题,我们发现一个大问题,大家都知道的,凡是破过或用过的都碰到过的.瑞星卡卡和防拷系统是死对头,很多人都说装了瑞星卡卡那个狮子就过不了防拷,我就将我的分析解释如下:
很明显的,如果我转载的第一条信息为假,那么,瑞星卡卡和防拷没什么瓜葛!也就是瑞星卡卡不会和防拷冲突.反过来,假如它真的要借用零磁道,那么它必须把已经在引导启动的瑞星卡卡请回家,因为瑞星卡卡是有部分程序在引导执行,也就是说,一山不容二虎.实际防拷过不去是因为,瑞星卡卡占了它想去的地方.我只是个人看法.大家请给点意见!
如果我分析的没错,也就是说转载的第一项是正确的.
/*-----------------------------------
我们都很清楚,用OD破防拷会被蓝屏,这个大家都明白吧!很多都蓝过吧!今天我再给大家解释一下这个蓝屏怎么回事,假如,我转载的第二项为假,那么它就不会蓝屏为什么这么说呢?
先来了解一下,关键的内容Ring级别:
&&Ring3和Ring0。在CPU的所有指令中,有一些指令是非常危险的,如果错用,将会导致整个系统崩溃,如果所有的程序都能使用这些指令,那么系统将不知道什么原因就会当机,就会蓝屏,由于这个原因,CPU将指令分为特权指令和非特权指令,对于那些特权指令只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾害的指令。可以更形象的说特权指令就是那些儿童不宜的东西,非特权指令就是那些老少皆宜的东西。Intel的CPU指令特权级别分为四个级别:Ring0,Ring1,Ring2,Ring3。Windows只使用其中的Ring0和Ring3两个级别,其中Ring0是给操作系统使用,Ring3可以任意应用程序使用。Windows下的系统服务都是工作在Ring0级别上的,NT服务提供的函数都是完全运行在内核模式下。
&&大家看的也许有点糊涂,高手一看就明白.也就是防拷在被调试的时候,防拷系统有可能是获取了Ring0权限,来拥有对硬件操作的最高权,而普通的程序对硬件的操作都是被操作系统限制的,也就是说在Ring3权限无法对硬件有最为容易访问和控制权,只有获得了Ring0权限才可以对硬件直接操作.而我们对系统都了解的知道以下概念!
0x7FFFFFFF=2GB
0xFFFFFFFF=4GB
Windows内存管理:
&&Windows和大多数现代操作系统一样,Windows实现按需调页的虚拟内存机制。由于操作系统使用了虚拟内存,这就给应用程序造成了一个假象,以为计算机安装的内存远远超过自己所需要的数量。
&&在32位的Windows计算机上,进程具有4GB的虚拟内存地址空间,操作系统通常会把这4GB的地址空间划分为进程和系统两个部分。因此,每个进程可以获得2GB的虚拟内存,根据可用的容量。分配给所有进程的虚拟内存总数不能超过页面文件和大多数物理内存的总和(操作系统本身也要占据一小部分物理内存)。
有了这种机制,加上足够大的页面文件,就可以给进程分配超过物理内存容量的虚拟内存,Windows内存管理子系统必须让多个进程和缓存的文件数据(由缓存管理器管理)共享物理内存。内存管理器给每个进程(例如Windows&Explorer、记事本和Word)指派一部分物理内存,这叫做进程的工作集。可分页的内核和驱动程序部分,加上可分页的内核内存缓冲区(叫做分页池),还有缓存管理器所管理的物理内存,它们具有自己的工作集,叫做系统工作集。
&&也就是说所有的普通程序都是在Ring3上面运行,我们的OD也不例外,我们发现一下!随便打开一个程序,按下面的步鄹:
菜单-&查看-&内存,会发现点什么呢?往上面看看,往下面看看有没有大于0xFFFFFFFF的,也就是说OD也只能在Ring3的权限内进行程序调试!前面提到过,防拷为了获得对硬件的直接控制权它专门获得了系统权限,也就是说防拷和操作系统是拥有一样的权限,它就可以访问系统空间.我们来看一下
0xx7FFFFFFF&&是用户的2GB空间
0xxFFFFFFFF&&是系统的2GB空间
&&如果当一个普通进程访问系统空间,会怎么样呢?系统当然为了稳定将它赶回去了,也来个比方:OD和防拷同去公园,防拷有门票进去了,OD没门票不让进,OD生气了,电脑蓝了.实际就这么简单的.现在明白了蓝屏怎么回事了吧!
&&在OD追踪防拷的时候,被操作系统挡了回来而且还告诉OD:这里不是你这样的低等级程序能来的,那里来的回那呆着去!你可知道这里是系统专用2GB空间0xxFFFFFFFF,这就是大家看到的蓝屏上字的含义.而防拷获得了和系统一样的专用权,在防拷解密代码的时候,防拷占用的空间是系统的2GB空间,这样做的唯一好处就是你的系统不会再和以前一样稳定了,即使卸载了,也会影响系统稳定.如果经常GHOST系统的朋友就无所谓了,但是GHOST系统会影响硬盘的寿命.实际和病毒已经有点相近了,在系统权限做监视是病毒们的爱好,但是这样的病毒却不多,如果防拷要是专门监视你的安全信息那也是随手一拿的事,因为它连系统监视也可以很轻松的做到!还有什么不行的吗?做让人觉得可怕的是Ring0权限上运行的黑手.
/*-----------------------------------------------------------
防拷系统的自动运行,先来看看一段C代码,这个是我仿照防拷写的DLL,熟悉C的朋友一看就懂:
/*-----------------------------------------------------------
BOOL&APIENTRY&DllMain(&HANDLE&hModule,&
&&&&&&&&&&&&&&&&&&&&&&&DWORD&&ul_reason_for_call,&
&&&&&&&&&&&&&&&&&&&&&&&LPVOID&lpReserved
&&&&&&&&&&&)
&&&&switch&(ul_reason_for_call)
&&case&DLL_PROCESS_ATTACH:
&&&&//首次加载DLL时从此处执行
&&&&//当然,这里你可以开一个线程&&
&&&&&&&&&&hInstance=(HINSTANCE)hM
&&&&&&&&&&MessageBox(NULL,"Test!","[DLL加载]参数测试!",MB_OK);
&&case&DLL_THREAD_ATTACH:
&&case&DLL_THREAD_DETACH:
&&&&//做一些善后工作,如释放内存
&&case&DLL_PROCESS_DETACH:
&&&&//善后
&&&&return&TRUE;
-------------------------------------------------------------*/
&&这个不是DLL入口代码吗?是啊,这个有什么好说的人人都知道!但是人人都知道的东西,我们却为它不解了,防拷处理过的程序会自动运行的学问就在这里!DLL_PROCESS_ATTACH这个消息的处理让你在调用LoadLibrary获得DLL文件句柄时,程序已经被执行!还没用GetProcAddress程序已经被执行了,如果有兴趣的可以试一下!LoadLibrary后就被执行.说到这里又要解释一下了,实际我们的DLL和EXE都不是从DllMain()和WinMain()处才开始执行的.而是从__DllMainCRTStartup()和__WinMainCRTStartup处已经开始做最初的初始化了.不说那么多了,说多了又糊涂,总之,要知道的是:LoadLibrary一执行,DLL_PROCESS_ATTACH消息会被处理.
&&现在说了DLL的关键所在,那大家都知道WINDOWS可执行文件在执行前都会初始化加载一些模块,这些模块通常是系统执行程序最基本的,如:user32.dll,kernel32.dll,ntdll.dll等等.很常见吧!而我们看到的防拷处理过的程序,加载模块的时候也会被加载防拷DLL,因此,大家就看到防拷界面出现,而程序还没到WinMain或DllMain.这会大家明白了吧:)
/*--------------------------------------------------------
内存断点被忽略,除了硬件断点,管用以外,内存断点关键时候会不管用,我还没研究清楚.以后补
/*----------------------------------------------------------
代码在解密的时候有个固定格式:
//第一个参数是特征码:
//第二个参数是函数地址,这样的函数被称为手工函数,同常要跳两下才能到关键地方:
&&&&68&7CB6B2A7&&&&&push&&&&A7B2B67C
&&-&FF25&BCE19700&&&jmp&&&&&dword&ptr&[&&PAL4P.#1&]&&&&&&&&&&;&PAL4P.#1
//第二处跳转:
00CB6000&&&/E9&7D000000&&&&&jmp&&&&&00CB6082
//最后入口,函数入口都是这样固定的格式之前版本与之后版本有所不同:
00CB6082&&&&60&&&&&&&&&&&&&&pushad
00CB6083&&&&9C&&&&&&&&&&&&&&pushfd
00CB6084&&&&FC&&&&&&&&&&&&&&cld
00CB6085&&&&E8&&&&&&call&&&&00CB608A
00CB608A&&&&5B&&&&&&&&&&&&&&pop&&&&&ebx
00CB608B&&&&8D9B&76FFFFFF&&&lea&&&&&ebx,&dword&ptr&[ebx-8A]
00CB6091&&&&8B43&48&&&&&&&&&mov&&&&&eax,&dword&ptr&[ebx+48]
00CB6094&&&&B9&&&&&&mov&&&&&ecx,&1000
00CB6099&&&&3BC1&&&&&&&&&&&&cmp&&&&&eax,&ecx
00CB609B&&&&76&0B&&&&&&&&&&&jbe&&&&&short&00CB60A8
&&一整大的跳转之后天南地北就分不清楚了:(,比起之前的版本增加了破解难度,之前的跳转好搞现在新版的比较难了,每次都是大跳,而且地址不一样,实在晕头转向.
/*-------------------------------------------------------------
函数的重定位,实际就是把入口加密了,让你不知道调用那个函数,主要分三类:
第一,API函数:比较难,对API要特别清楚,不然很难修复确定函数是那一个的.而且要对写程序的经验也要熟悉哦!凭的就是经验了.后面会举例的
第二,内部函数加密:这个简单
第三,外部函数:这个就难了,关键是不知道调用那个函数,做了什么,一边解密一边执行,等到头了,也执行完了.相对来说最难了.
/*----------------------------------------------------------------
跳转,主要是JMP&JE&JNE&JLE&JG等等加密,让你看不出来跳那去了.解决简单.
/*------------------------------------------------------------------
举例,最简单的一个API函数修复的例子很简单的,比这个难的那就靠经验分析了哦!
这个是创建窗口的一部分,反汇编如下:
&&/$&&83EC&30&&&&&&&sub&&&&&esp,&30
&&|.&&A1&F4088E00&&&mov&&&&&eax,&dword&ptr&[8E08F4]
&&|.&&53&&&&&&&&&&&&push&&&&ebx
&&|.&&8B5C24&38&&&&&mov&&&&&ebx,&dword&ptr&[esp+38]
004099AD&&|.&&55&&&&&&&&&&&&push&&&&ebp
004099AE&&|.&&56&&&&&&&&&&&&push&&&&esi
004099AF&&|.&&8BF1&&&&&&&&&&mov&&&&&esi,&ecx
&&|.&&57&&&&&&&&&&&&push&&&&edi
&&|.&&6A&7F&&&&&&&&&push&&&&7F
&&|.&&8D4E&78&&&&&&&lea&&&&&ecx,&dword&ptr&[esi+78]
&&|.&&53&&&&&&&&&&&&push&&&&ebx
&&|.&&51&&&&&&&&&&&&push&&&&ecx
&&|.&&8946&68&&&&&&&mov&&&&&dword&ptr&[esi+68],&eax
004099BC&&|.&&E8&EFB12600&&&call&&&&00674BB0&&&&&&&&&&&&&&&&&&&&&&&;这里简单点,忽略或者算是修复好了吧
&&|.&&8B5424&58&&&&&mov&&&&&edx,&dword&ptr&[esp+58]
&&|.&&8B46&68&&&&&&&mov&&&&&eax,&dword&ptr&[esi+68]
&&|.&&8B4C24&64&&&&&mov&&&&&ecx,&dword&ptr&[esp+64]
004099CC&&|.&&83C4&0C&&&&&&&add&&&&&esp,&0C
004099CF&&|.&&33ED&&&&&&&&&&xor&&&&&ebp,&ebp
&&|.&&C&mov&&&&&dword&ptr&[esp+10],&30
&&|.&&68&007F0000&&&push&&&&7F00&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/RsrcName&=&IDC_ARROW
004099DE&&|.&&55&&&&&&&&&&&&push&&&&ebp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hInst&=&&NULL
004099DF&&|.&&C2&mov&&&&&dword&ptr&[esp+1C],&2000&&&&&&&&&;&|第一个参数从0x7F00看出来是个常数也就是说它是一个固定的值,
&&|.&&&&&&&mov&&&&&dword&ptr&[esp+20],&edx&&&&&&&&&&;&|PUSH&EBP第二个参数中EBP是什么呢?往上看就看到xor&&&&&ebp,&ebp这句说明就是:
004099EB&&|.&&896C24&24&&&&&mov&&&&&dword&ptr&[esp+24],&ebp&&&&&&&&&&;&|FUN(NULL,0x7F00)的函数,这段时间会有什么函数出现了呢?熟悉写程序的朋友都知道
004099EF&&|.&&896C24&28&&&&&mov&&&&&dword&ptr&[esp+28],&ebp&&&&&&&&&&;&|最常出现的是LoadCursorA和LoadIconA那么到底那一个呢?我们发现,LoadIconA通常会是
&&|.&&C&&&&&mov&&&&&dword&ptr&[esp+2C],&eax&&&&&&&&&&;&|字符串出现的多或者它还有个MAKEINTRESOURCE这个出现!还有就是0x7F00=&IDC_ARROW
&&|.&&894C24&30&&&&&mov&&&&&dword&ptr&[esp+30],&ecx&&&&&&&&&&;&|出现的最多,所以这里修复使用前着LoadCursorA
004099FB&&|.&&FF15&&call&&&&dword&ptr&[842774]&&&&&&&&&&&&&&&;&\LoadCursorA
00409A01&&|.&&8B5424&5C&&&&&mov&&&&&edx,&dword&ptr&[esp+5C]
00409A05&&|.&&C&&&&&mov&&&&&dword&ptr&[esp+2C],&eax
00409A09&&|.&&8D4424&10&&&&&lea&&&&&eax,&dword&ptr&[esp+10]
00409A0D&&|.&&896C24&30&&&&&mov&&&&&dword&ptr&[esp+30],&ebp
00409A11&&|.&&50&&&&&&&&&&&&push&&&&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/pWndClassEx
00409A12&&|.&&896C24&38&&&&&mov&&&&&dword&ptr&[esp+38],&ebp&&&&&&&&&&;&|就一个参数,结构都创建了不注册窗口等着干嘛!
00409A16&&|.&&895C24&3C&&&&&mov&&&&&dword&ptr&[esp+3C],&ebx&&&&&&&&&&;&|这里100%就是注册窗口了:)
00409A1A&&|.&&&&&&&mov&&&&&dword&ptr&[esp+40],&edx&&&&&&&&&&;&|
00409A1E&&|.&&FF15&&call&&&&dword&ptr&[842770]&&&&&&&&&&&&&&&;&\RegisterClassExA
/*-----------------------------------------------------------
//下面是关于注册窗口的C样板代码
&&wndclass.style=CS_HREDRAW&|&CS_VREDRAW;
&&wndclass.lpfnWndProc=WindowP
&&wndclass.cbClsExtra=0;
&&wndclass.cbWndExtra=0;
&&wndclass.hInstance=hI
&&wndclass.hIcon=LoadIcon(hInst,(LPCTSTR)IDI_ICON1);
&&wndclass.hCursor=LoadCursor(NULL,&IDC_ARROW);
&&wndclass.lpszMenuName=NULL;
&&wndclass.lpszClassName=szAppN
&&wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
//我们对应一下:
004099DF&&|.&&C2&mov&&&&&dword&ptr&[esp+1C],&2000&&&;&&wndclass.style&&&&
&&|.&&&&&&&mov&&&&&dword&ptr&[esp+20],&edx&&&&;&&wndclass.lpfnWndProc&&&&
004099EB&&|.&&896C24&24&&&&&mov&&&&&dword&ptr&[esp+24],&ebp&&&&;&&wndclass.cbClsExtra&&&&&&
004099EF&&|.&&896C24&28&&&&&mov&&&&&dword&ptr&[esp+28],&ebp&&&&;&&wndclass.cbWndExtra&&&&&&&&
&&|.&&C&&&&&mov&&&&&dword&ptr&[esp+2C],&eax&&&&;&&wndclass.hInstance&&&&&&
&&|.&&894C24&30&&&&&mov&&&&&dword&ptr&[esp+30],&ecx&&&&;&&wndclass.hIcon&&&&
004099FB&&|.&&FF15&&call&&&&dword&ptr&[842774]&&&&&&&&&;&&wndclass.hCursor
//可以看的明白大家轮一轮到:)简单吧!
---------------------------------------------------------------*/
00409A24&&|.&&66:85C0&&&&&&&test&&&&ax,&ax
00409A27&&|.&&75&26&&&&&&&&&jnz&&&&&short&00409A4F
00409A29&&|.&&6A&53&&&&&&&&&push&&&&53
00409A2B&&|.&&68&8C3F8A00&&&push&&&&008A3F8C&&&&&&&&&&&&&&&&&&&&&&&&&;&&ASCII&"D:\PAL4\project\Sourcecode\RwCasing\rwc_Windows.cpp"
00409A30&&|.&&68&303F8A00&&&push&&&&008A3F30&&&&&&&&&&&&&&&&&&&&&&&&&;&&ASCII&"FILE:&&[%s]
LINE:&&[%d]
INFO:&&Error[rwcWindows::createWindows&failed&&RegisterClassEx&]
00409A35&&|.&&E8&F686FFFF&&&call&&&&
00409A3A&&|.&&50&&&&&&&&&&&&push&&&&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&根据上面的文字就知道是要做什么了注册窗口了.
00409A3B&&|.&&E8&8089FFFF&&&call&&&&
00409A40&&|.&&83C4&10&&&&&&&add&&&&&esp,&10
00409A43&&|.&&33C0&&&&&&&&&&xor&&&&&eax,&eax
00409A45&&|.&&5F&&&&&&&&&&&&pop&&&&&edi
00409A46&&|.&&5E&&&&&&&&&&&&pop&&&&&esi
00409A47&&|.&&5D&&&&&&&&&&&&pop&&&&&ebp
00409A48&&|.&&5B&&&&&&&&&&&&pop&&&&&ebx
00409A49&&|.&&83C4&30&&&&&&&add&&&&&esp,&30
00409A4C&&|.&&C2&1C00&&&&&&&retn&&&&1C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;注册失败就从这里回家了
00409A4F&&|&&&8DBE&&lea&&&&&edi,&dword&ptr&[esi+108]&&&&&&&&&;这里是干吗的呢?不知道了吧糊涂了吧!呵呵!
00409A55&&|.&&89AE&0C010000&mov&&&&&dword&ptr&[esi+10C],&ebp
00409A5B&&|.&&55&&&&&&&&&&&&push&&&&ebp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;PUSH&EBP说明这个函数只有一个参数,但是拿OD跟来看看,EBP=1或0
00409A5C&&|.&&892F&&&&&&&&&&mov&&&&&dword&ptr&[edi],&ebp&&&&&&&&&&&&&;参数为1或0的就很少了,很有可能是BOOL性的参数,只有1和0的,当然
00409A5E&&|.&&8B0D&980E8E00&mov&&&&&ecx,&dword&ptr&[8E0E98]&&&&&&&&&&;也有2的,可是这里用了两次,发现了么?两次说明了什么参数1和0的
00409A64&&|.&&8B2D&6C278400&mov&&&&&ebp,&dword&ptr&[84276C]&&&&&&&&&&;结果不一样的,那我们看看什么函数需要一个参数,而且返回值却不同
00409A6A&&|.&&898E&&mov&&&&&dword&ptr&[esi+110],&ecx&&&&&&&&&;用的几率最高的是那个呢?GetSystemMetrics,我怎么知道是它呢?
00409A70&&|.&&8B15&9C0E8E00&mov&&&&&edx,&dword&ptr&[8E0E9C]&&&&&&&&&&;首先,这个时候用的最多的就是GetSystemMetrics,其次,SM_CXSCREEN
00409A76&&|.&&0&mov&&&&&dword&ptr&[esi+114],&edx&&&&&&&&&;SM_CYSCREEN两个参数让它返回了不同的值,其次是一个参数,我们再验证一下
00409A7C&&|.&&FFD5&&&&&&&&&&call&&&&ebp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;如果,CreateWindowExA这个函数的长和宽没定那就肯定是了,要问为什么的
00409A7E&&|.&&6A&01&&&&&&&&&push&&&&1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;只能说是需要多研究,经验了:)
00409A80&&|.&&FFD5&&&&&&&&&&call&&&&ebp
00409A82&&|.&&A1&F8088E00&&&mov&&&&&eax,&dword&ptr&[8E08F8]
00409A87&&|.&&85C0&&&&&&&&&&test&&&&eax,&eax
00409A89&&|.&&75&14&&&&&&&&&jnz&&&&&short&00409A9F
00409A8B&&|.&&8A4424&50&&&&&mov&&&&&al,&byte&ptr&[esp+50]
00409A8F&&|.&&BD&00000A80&&&mov&&&&&ebp,&800A0000
00409A94&&|.&&84C0&&&&&&&&&&test&&&&al,&al
00409A96&&|.&&74&09&&&&&&&&&je&&&&&&short&00409AA1
00409A98&&|.&&BD&0000CA80&&&mov&&&&&ebp,&80CA0000
00409A9D&&|.&&EB&02&&&&&&&&&jmp&&&&&short&00409AA1
00409A9F&&|&&&33ED&&&&&&&&&&xor&&&&&ebp,&ebp
00409AA1&&|&&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/HasMenu&=&FALSE
00409AA3&&|.&&55&&&&&&&&&&&&push&&&&ebp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Style&&&&这个函数是最不好估计的但是,幸好它没加密的,但是分析的话可以
00409AA4&&|.&&57&&&&&&&&&&&&push&&&&edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|pRect&&&&从这几个参数入手,毕竟大家可以很容易的得到EDI是RECT类型指针
00409AA5&&|.&&FF15&&call&&&&dword&ptr&[842768]&&&&&&&&&&&&&&&;&\AdjustWindowRect&三个参数的RECT类函数就不多了,GetWindowsRect,GetClientRect
00409AAB&&|.&&8B46&68&&&&&&&mov&&&&&eax,&dword&ptr&[esi+68]&&&&&&&&&&;&在窗口没创建之前用它们是不可能的,而FrameRect这类函数却很少见,最常见的
00409AAE&&|.&&8B8E&&mov&&&&&ecx,&dword&ptr&[esi+114]&&&&&&&&&;&只有它了哦!可以根据参数数量和内容确定的
00409AB4&&|.&&8B96&&mov&&&&&edx,&dword&ptr&[esi+110]
00409ABA&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/lParam&=&NULL这个不用看了吧!注册这么长时间的窗口,还不创建要等到什么时候,
00409ABC&&|.&&50&&&&&&&&&&&&push&&&&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hInst&&&&&&&&数数参数够,PUSH&0/PUSH&EAX/PUSH&0符合CreateWindowExA函数的最后三个
00409ABD&&|.&&8B86&0C010000&mov&&&&&eax,&dword&ptr&[esi+10C]&&&&&&&&&;&|&&&&&&&&&&&&&参数,PUSH&0就是lParam通常是NULL/PUSH&EAX就是句柄/PUSH&0就是不要菜单,
00409AC3&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hMenu&=&NULL&这类游戏程序要什么菜单当然是0了
00409AC5&&|.&&2BC8&&&&&&&&&&sub&&&&&ecx,&eax&&&&&&&&&&&&&&&&&&&&&&&&&;&|
00409AC7&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hParent&=&NULL
00409AC9&&|.&&8B4424&58&&&&&mov&&&&&eax,&dword&ptr&[esp+58]&&&&&&&&&&;&|&&&&&&&&&&&&&PUSH&ECX&和PUSH&EDX算算正好是长和宽的位置
00409ACD&&|.&&51&&&&&&&&&&&&push&&&&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Height
00409ACE&&|.&&8B0F&&&&&&&&&&mov&&&&&ecx,&dword&ptr&[edi]&&&&&&&&&&&&&;&|
00409AD0&&|.&&2BD1&&&&&&&&&&sub&&&&&edx,&ecx&&&&&&&&&&&&&&&&&&&&&&&&&;&|
00409AD2&&|.&&52&&&&&&&&&&&&push&&&&edx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Width
00409AD3&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Y&=&0&&&&&&&&数数就是坐标嘛!
00409AD5&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|X&=&0
00409AD7&&|.&&55&&&&&&&&&&&&push&&&&ebp&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Style
00409AD8&&|.&&50&&&&&&&&&&&&push&&&&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|WindowName&&&&OD跟过来看到窗口标题没问题了肯定是CreateWindowExA
00409AD9&&|.&&53&&&&&&&&&&&&push&&&&ebx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|Class
00409ADA&&|.&&6A&00&&&&&&&&&push&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|ExtStyle&=&0
00409ADC&&|.&&FF15&&call&&&&dword&ptr&[842764]&&&&&&&&&&&&&&&;&\CreateWindowExA&
00409AE2&&|.&&85C0&&&&&&&&&&test&&&&eax,&eax
00409AE4&&|.&&8946&6C&&&&&&&mov&&&&&dword&ptr&[esi+6C],&eax
00409AE7&&|.&&75&0A&&&&&&&&&jnz&&&&&short&00409AF3
00409AE9&&|.&&5F&&&&&&&&&&&&pop&&&&&edi
00409AEA&&|.&&5E&&&&&&&&&&&&pop&&&&&esi
00409AEB&&|.&&5D&&&&&&&&&&&&pop&&&&&ebp
00409AEC&&|.&&5B&&&&&&&&&&&&pop&&&&&ebx
00409AED&&|.&&83C4&30&&&&&&&add&&&&&esp,&30
00409AF0&&|.&&C2&1C00&&&&&&&retn&&&&1C
........................................省略吧!要这样下去什么时候才完呀!
恩!....下回给大家带来破解防拷的方法!&
我这里用的是PAL4的反汇编代码!下会我真的想和大家共享破解方法,但是我实在怕这样做会影响的仙剑正版,基本上都破了,也修的差不多了,现在只是BUG修复,还有就是我的破解不支持2003和VISTA.我真的为难了,发与不发一直在考虑,所以,我和大家都希望下会把破防拷的方法带给大家,但是我看了游侠论坛的朋友的意见,真的想留着自己玩了,至于我是否能够再发关于破防拷的文章,我也很难说,我现在很困惑了,如果,发了也许我从今以后都不会在破防拷了,也看不到仙5了.正如软星解散的时候说的一样:随缘!......
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-By&EasyStudy&For&PhantomNet
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2007&.9&&&.20
关于 酷狗2012去广告
&&&&& 最近家里这个网属实不给力,看个视频都卡个一b,好久没写东西了,最近挺喜欢听那首春娇与志明的插曲Drenched,一直用酷狗,以前没想过把右上角那个倒霉的长条广告去掉。今天闲来无聊研究了一下,进入正题。& & &1、目标程序(目前最新版本):&& & & &2、查克,这个查克工具比PEID强大,强大在不管有没有加壳都能查出编写语言&&&&& & & &当然看结果都知道,酷狗是用vc++写的,而且没有加壳。& & &3、od载入(典型的vc8入口特征)
&& 4、准备工作& & 1)& &到酷狗目录下
& & 查看红框那个图片文件属性
& & 我们要去的广告图片的大小事620*60,60的十六进制是3C。620是26C。& & 2) 如何断点& &因为要去的是一个图片广告,他在写代码时候可能用到的API就下面2个& & CreateBitmap&&BitBlt函数& 倒着来先试试 Bitblt这个函数了。& 看看&BitBlt&函数的参数:BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORD dwRop);x:目标矩形区域的左上角x轴坐标点。y:目标矩形区域的左上角y轴坐标点。nWidth:在目标设备中绘制位图的宽度。nHight:在目标设备中绘制位图的高度。pSrcDC:源设备上下文对象指针。xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。dwRop:光栅操作代码&5,od下此断点分析,排除没用的,此处省略100字,最后找到得关键代码。&&&&
00EC7E70 &/$ &6A FF & & & & push -0x1 & & & & & & & & & & & & & & & &; &关键断首
00EC7E72 &|. &68 E8831501 & push KuGou.
00EC7E77 &|. &64:A1 0000000&mov eax,dword ptr fs:[0]
00EC7E7D &|. &50 & & & & & &push eax
00EC7E7E &|. &83EC 20 & & & sub esp,0x20
00EC7E81 &|. &53 & & & & & &push ebx
00EC7E82 &|. &55 & & & & & &push ebp
00EC7E83 &|. &56 & & & & & &push esi
00EC7E84 &|. &57 & & & & & &push edi
00EC7E85 &|. &A1
& mov eax,dword ptr ds:[0x1757230]
00EC7E8A &|. &33C4 & & & & &xor eax,esp
00EC7E8C &|. &50 & & & & & &push eax
00EC7E8D &|. &8D4424 34 & & lea eax,dword ptr ss:[esp+0x34]
00EC7E91 &|. &64:A3 0000000&mov dword ptr fs:[0],eax
00EC7E97 &|. &8BF9 & & & & &mov edi,ecx
00EC7E99 &|. &8B5C24 48 & & mov ebx,dword ptr ss:[esp+0x48]
00EC7E9D &|. &895C24 48 & & mov dword ptr ss:[esp+0x48],ebx
00EC7EA1 &|. &C0&mov dword ptr ss:[esp+0x3C],0x0
00EC7EA9 &|. &83BF DC010000&cmp dword ptr ds:[edi+0x1DC],0x0
00EC7EB0 & & &0F84 8E000000 je KuGou.00EC7F44 & //这个是个关键跳
00EC7EB6 &|. &8B4F 04 & & & mov ecx,dword ptr ds:[edi+0x4]
00EC7EB9 &|. &8D4424 14 & & lea eax,dword ptr ss:[esp+0x14]
00EC7EBD &|. &50 & & & & & &push eax & & & & & & & & & & & & & & & & ; /pRect
00EC7EBE &|. &51 & & & & & &push ecx & & & & & & & & & & & & & & & & ; |hWnd
00EC7EBF &|. &FF15 9CA71B01 call dword ptr ds:[&&USER32.GetClientRec&; \GetClientRect
00EC7EC5 &|. &8B8F DC010000 mov ecx,dword ptr ds:[edi+0x1DC]
00EC7ECB &|. &E8 80EEEFFF & call KuGou.00DC6D50
00EC7ED0 &|. &8B8F DC010000 mov ecx,dword ptr ds:[edi+0x1DC]
00EC7ED6 &|. &8BF0 & & & & &mov esi,eax
00EC7ED8 &|. &E8 53EEEFFF & call KuGou.00DC6D30
00EC7EDD &|. &56 & & & & & &push esi & & & & & & & & & & & & & & & & ; /Bottom
00EC7EDE &|. &50 & & & & & &push eax & & & & & & & & & & & & & & & & ; |Right
00EC7EDF &|. &6A 00 & & & & push 0x0 & & & & & & & & & & & & & & & & ; |Top = 0
00EC7EE1 &|. &6A 00 & & & & push 0x0 & & & & & & & & & & & & & & & & ; |Left = 0
00EC7EE3 &|. &8D5424 34 & & lea edx,dword ptr ss:[esp+0x34] & & & & &; |
00EC7EE7 &|. &52 & & & & & &push edx & & & & & & & & & & & & & & & & ; |pRect
00EC7EE8 &|. &FF15 08A71B01 call dword ptr ds:[&&USER32.SetRect&] & &; \SetRect
00EC7EEE &|. &53 & & & & & &push ebx & & & & & & & & & & & & & & & & ; /hDC
00EC7EEF &|. &FF15 28A11B01 call dword ptr ds:[&&GDI32.CreateCompati&; \CreateCompatibleDC
00EC7EF5 &|. &8B8F DC010000 mov ecx,dword ptr ds:[edi+0x1DC]
00EC7EFB &|. &8BF0 & & & & &mov esi,eax
00EC7EFD &|. &E8 0EEEEFFF & call KuGou.00DC6D10
00EC7F02 &|. &8B3D 64A11B01 mov edi,dword ptr ds:[&&GDI32.SelectObje&; &GDI32.SelectObject
00EC7F08 &|. &50 & & & & & &push eax & & & & & & & & & & & & & & & & ; /hObject
00EC7F09 &|. &56 & & & & & &push esi & & & & & & & & & & & & & & & & ; |hDC
00EC7F0A &|. &FFD7 & & & & &call edi & & & & & & & & & & & & & & & & ; \SelectObject
00EC7F0C &|. &8B5424 18 & & mov edx,dword ptr ss:[esp+0x18]
00EC7F10 &|. &8B4C24 1C & & mov ecx,dword ptr ss:[esp+0x1C]
00EC7F14 &|. &2B4C24 14 & & sub ecx,dword ptr ss:[esp+0x14]
00EC7F18 &|. &68 2000CC00 & push KuGou.00CC0020 & & & & & & & & & & &; /ROP = SRCCOPY
00EC7F1D &|. &6A 00 & & & & push 0x0 & & & & & & & & & & & & & & & & ; |YSrc = 0
00EC7F1F &|. &6A 00 & & & & push 0x0 & & & & & & & & & & & & & & & & ; |XSrc = 0
00EC7F21 &|. &8BE8 & & & & &mov ebp,eax & & & & & & & & & & & & & & &; |
00EC7F23 &|. &8B4424 2C & & mov eax,dword ptr ss:[esp+0x2C] & & & & &; |
00EC7F27 &|. &56 & & & & & &push esi & & & & & & & & & & & & & & & & ; |hSrcDC
00EC7F28 &|. &2BC2 & & & & &sub eax,edx & & & & & & & & & & & & & & &; |
00EC7F2A &|. &50 & & & & & &push eax & & & & & & & & & & & & & & & & ; |Height
00EC7F2B &|. &8B4424 28 & & mov eax,dword ptr ss:[esp+0x28] & & & & &; |
00EC7F2F &|. &51 & & & & & &push ecx & & & & & & & & & & & & & & & & ; |Width
00EC7F30 &|. &52 & & & & & &push edx & & & & & & & & & & & & & & & & ; |YDest
00EC7F31 &|. &50 & & & & & &push eax & & & & & & & & & & & & & & & & ; |XDest
00EC7F32 &|. &53 & & & & & &push ebx & & & & & & & & & & & & & & & & ; |hDestDC
00EC7F33 &|. &FF15 CCA01B01 call dword ptr ds:[&&GDI32.BitBlt&] & & &; \关键。。。。。。。。。。这里的call是导入那个AdBarDefault.jpg&
00EC7F39 &|. &55 & & & & & &push ebp & & & & & & & & & & & & & & & & ; /hObject
00EC7F3A &|. &56 & & & & & &push esi & & & & & & & & & & & & & & & & ; |hDC
00EC7F3B &|. &FFD7 & & & & &call edi & & & & & & & & & & & & & & & & ; \SelectObject
00EC7F3D &|. &56 & & & & & &push esi & & & & & & & & & & & & & & & & ; /hDC
00EC7F3E &|. &FF15 58A11B01 call dword ptr ds:[&&GDI32.DeleteDC&] & &; \DeleteDC
00EC7F44 &|& &C74424 3C FFF&mov dword ptr ss:[esp+0x3C],-0x1 //刚才那个如果跳的话跳到这里
00EC7F4C &|. &33C0 & & & & &xor eax,eax
00EC7F4E &|. &8B4C24 34 & & mov ecx,dword ptr ss:[esp+0x34]
00EC7F52 &|. &64:890D 00000&mov dword ptr fs:[0],ecx
00EC7F59 &|. &59 & & & & & &pop ecx
00EC7F5A &|. &5F & & & & & &pop edi
00EC7F5B &|. &5E & & & & & &pop esi
00EC7F5C &|. &5D & & & & & &pop ebp
00EC7F5D &|. &5B & & & & & &pop ebx
00EC7F5E &|. &83C4 2C & & & add esp,0x2C
00EC7F61 &\. &C2 1000 & & & retn 0x10
第一步分析告于段落,把00EC7EB0 & & &0F84 8E000000 je KuGou.00EC7F44 & //这个是个关键跳 &里的je修改为jmp然后保存一份exe。打开后,发现3秒之内没有广告,但是3秒后一出来了,说明程序后面会有循环来显示一个随机的网络广告,但是尺寸是不变的,就是刚才查过的620*60.下&第二步,搞定这个循环里面的检查部分。这里直接在汇编代码上右键--&查找--&所有命令,输入 &mov edi,3C这个3C就是那个图片的高度的16进制表示,或者查找mov esi,0x26C也行。
双击第二个,下面是关键代码&
00EC7DC0 & . &83EC 40 & & & sub esp,0x40
00EC7DC3 & . &807C24 4C 00 &cmp byte ptr ss:[esp+0x4C],0x0
00EC7DC8 & & &0F84
je KuGou.00EC7E67 & &//和上一个同理,改为jmp就ok
00EC7DCE & . &56 & & & & & &push esi
00EC7DCF & . &33C0 & & & & &xor eax,eax
00EC7DD1 & . &8941 E4 & & & mov dword ptr ds:[ecx-0x1C],eax
00EC7DD4 & . &33D2 & & & & &xor edx,edx
00EC7DD6 & . &8951 E8 & & & mov dword ptr ds:[ecx-0x18],edx
00EC7DD9 & . &57 & & & & & &push edi
00EC7DDA & . &8941 B8 & & & mov dword ptr ds:[ecx-0x48],eax
00EC7DDD & . &8951 BC & & & mov dword ptr ds:[ecx-0x44],edx
00EC7DE0 & . &BE 6C020000 & mov esi,0x26C &//宽度620(16进制 26C)
00EC7DE5 & . &8971 EC & & & mov dword ptr ds:[ecx-0x14],esi
00EC7DE8 & . &BF 3C000000 & mov edi,0x3C &//高度60(16进制 3C)
00EC7DED & . &8979 F0 & & & mov dword ptr ds:[ecx-0x10],edi
00EC7DF0 & . &33F6 & & & & &xor esi,esi
00EC7DF2 & . &8971 C0 & & & mov dword ptr ds:[ecx-0x40],esi
00EC7DF5 & . &C741 F4 11000&mov dword ptr ds:[ecx-0xC],0x11
00EC7DFC & . &8D71 E0 & & & lea esi,dword ptr ds:[ecx-0x20]
00EC7DFF & . &33FF & & & & &xor edi,edi
00EC7E01 & . &8979 C4 & & & mov dword ptr ds:[ecx-0x3C],edi
00EC7E04 & . &8B06 & & & & &mov eax,dword ptr ds:[esi]
00EC7E06 & . &8B50 0C & & & mov edx,dword ptr ds:[eax+0xC]
00EC7E09 & . &8D4C24 38 & & lea ecx,dword ptr ss:[esp+0x38]
00EC7E0D & . &51 & & & & & &push ecx
00EC7E0E & . &8BCE & & & & &mov ecx,esi
00EC7E10 & . &FFD2 & & & & &call edx
00EC7E12 & . &8B06 & & & & &mov eax,dword ptr ds:[esi]
00EC7E14 & . &8B50 10 & & & mov edx,dword ptr ds:[eax+0x10]
00EC7E17 & . &8D4C24 18 & & lea ecx,dword ptr ss:[esp+0x18]
00EC7E1B & . &51 & & & & & &push ecx
00EC7E1C & . &8BCE & & & & &mov ecx,esi
00EC7E1E & . &FFD2 & & & & &call edx
00EC7E20 & . &8B06 & & & & &mov eax,dword ptr ds:[esi]
00EC7E22 & . &8B50 18 & & & mov edx,dword ptr ds:[eax+0x18]
00EC7E25 & . &8D4C24 08 & & lea ecx,dword ptr ss:[esp+0x8]
00EC7E29 & . &51 & & & & & &push ecx
00EC7E2A & . &8BCE & & & & &mov ecx,esi
00EC7E2C & . &FFD2 & & & & &call edx
00EC7E2E & . &8B46 14 & & & mov eax,dword ptr ds:[esi+0x14]
00EC7E31 & . &50 & & & & & &push eax
00EC7E32 & . &8D4E 04 & & & lea ecx,dword ptr ds:[esi+0x4]
00EC7E35 & . &51 & & & & & &push ecx
00EC7E36 & . &8D5424 10 & & lea edx,dword ptr ss:[esp+0x10]
00EC7E3A & . &52 & & & & & &push edx
00EC7E3B & . &8D4424 24 & & lea eax,dword ptr ss:[esp+0x24]
00EC7E3F & . &50 & & & & & &push eax
00EC7E40 & . &8D4C24 38 & & lea ecx,dword ptr ss:[esp+0x38]
00EC7E44 & . &51 & & & & & &push ecx
00EC7E45 & . &E8 7682EAFF & call KuGou.00D700C0
00EC7E4A & . &8B16 & & & & &mov edx,dword ptr ds:[esi]
00EC7E4C & . &8B52 08 & & & mov edx,dword ptr ds:[edx+0x8]
00EC7E4F & . &83C4 14 & & & add esp,0x14
00EC7E52 & . &57 & & & & & &push edi
00EC7E53 & . &8D4424 2C & & lea eax,dword ptr ss:[esp+0x2C]
00EC7E57 & . &50 & & & & & &push eax
00EC7E58 & . &8BCE & & & & &mov ecx,esi
00EC7E5A & . &FFD2 & & & & &call edx
00EC7E5C & . &8B06 & & & & &mov eax,dword ptr ds:[esi]
00EC7E5E & . &8B50 04 & & & mov edx,dword ptr ds:[eax+0x4]
00EC7E61 & . &8BCE & & & & &mov ecx,esi
00EC7E63 & . &FFD2 & & & & &call edx
00EC7E65 & . &5F & & & & & &pop edi
00EC7E66 & . &5E & & & & & &pop esi
00EC7E67 & & &83C4 40 & & & add esp,0x40
00EC7E6A & . &C2 0C00 & & & retn 0xC&6、结束。明天第一节课,又是蛋疼的一天,一定要起来,最后俩周,就考试了。&传个结果图。顺便说下下,还有一些小的广告,比如右下角的文字之类的,这些就算是些小鬼,也不会很难的,只是最近没时间细细研究了,今天就这样吧,等假期再说吧。&
一个学linux c的网站
【转自看雪】讲述一个关于高考的“黑客”故事:用2B铅笔“注入”阅卷系统
讲述一个关于高考的&黑客&故事:用2B铅笔&注入&阅卷系统
今天,又是一年一度高考的日子。
回想起16年前(1996年)&&那是高中的一段艰苦岁月&&
几乎每天都要进行一场考高模拟测试,同学和老师们,都是叫苦不迭。
那时候,用2B铅笔填涂答题卡的答卷方式,已经在高考中开始实施。教育主管部门和校方,为了&实战演练&考生们的临场技能,在模拟考试中,也实行了答题卡方式。
那是一次全市范围的英语模拟考试,答题卡将被上交到市级考试中心机构,进行计算机阅卷处理。
我早早地就做完了试题。闲着没事,就开始琢磨起这个&答题卡&来。
直到现在,我还清楚地记得,在那张长方形答题卡上面的最右边,从上到下,几十个小黑块与空白相间排列。
这一长条相间排列的小黑块与空白,是做什么用的呢?
我的直觉告诉我:
(1)当答题卡被送入电子阅卷设备之后,设备的接纳口,一定要比答题卡更宽一些。就像较小的豆子要通过较大口径的漏斗口,才能被漏斗收进去一样。如果设备的接纳口跟答题卡的宽度一样,那么难免会发生卡纸。
(2)因为电子阅卷设备的接纳口,存在上述的冗余空间,又因为答题卡在被摆放和被传送的过程中,一定会出现&抖动&,那么,每张答题卡对于设备接纳口的位置,都是随机的。
(3)因为答题卡相对于设备接纳口的位置是随机的,那么,接下来要让电子阅卷设备的读卷探头(一种指针),能够准确地识别答题卡上的填涂信息,就必然要有一种&定位机制&,使得读卷探头和答题卡的相对位置,是可以被精准测量的&偏移量&。
(4)那么,观察现在手上的这张答题卡。在整张答题卡上,最有可能用来实现这种&定位机制&的,就应该是那一长条相间排列的小黑块与空白了。
(5)之所以选用2B铅笔来填涂,是因为2B铅笔留下的石墨厚度,可以对电子阅卷设备所发出的信号(猜想是光信号)做出影响。也就是说,当石墨的厚度足以使其吸收光信号,而不是像白纸的空白处反射光信号而被设备俘获的时候,电子阅卷设备就知道该考生的答项是什么了。
(6)那么,第(4)点中所假象的&定位机制&,应该同样也是利用光信号的被吸收和被反射来实现。这样的话,如果在那一长条相隔排列的小黑块之间的空白处,全部用2B铅笔涂满的话,石墨将与小黑块连为一体,成为一个黑色的整长条。如此一来,上述的&定位机制&就失效了。
(7)当&定位机制&失效之后,答题卡相对于电子阅卷设备的位置,就永远是不确定的了,那么,电子阅卷设备将失效,它将无法判别考生的答项是什么了。
就这么胡思乱想了一通之后,我开始动手把以上的设想付诸实施,就是用2B铅笔,把答题卡上面最右边的,相隔排列的小黑块之间的空白,全部涂黑。
过了两天之后,我知道了结局:
当我们这次模拟考试的答题卡,被送到市级考试中心之后,那里的电子阅卷设备彻底失灵。当次的所有答题卡全被绞成一团,险些全部废掉。后来不得不采用老师人工阅卷的方式,来批阅这些烂纸。电子阅卷中心的工作人员,排查了好久,最后终于发现,就是因为我这张&诡异&的答题卡,惹的祸。
我们的英语老师,不可能理解我这个小孩儿能动那么多&鬼脑筋&,他认定我是在考试时&思想不集中&。他对我说:&以后不要再这样了&&&
同班同学,不论我跟他们怎么解释,这次事故是如何实现的,他们都始终听不懂。
这样的事情,此后我再也没有做过,因为我已经亲自地充分验证了我的一次&白日梦&式的假想。
我已经非常满足了。
ubuntu12.04LTS
& & & 最近又装了linux,决定好好用用,省得每天打dota,浪费生命,顺便好好学习一下emacs(编辑器之神)。vim号称(神的编辑器),就好像倚天剑和屠龙刀,其实精一个就好了。各有利弊,总体来说还是emacs的可扩展性强些,无所谓了。学校老师让我们搞emacs那就搞呗。之前自己太幼稚,觉得emacs没用,下一些blockcode之类的IDE去编程。
& & 其实是我不了解而已,当你没有完全了解某些事物的时候总会去藐视他,觉得他没用。只是自己不懂的开发而已。
& & &最近越来越喜欢linux喜欢emacs。喜欢它的开放,简单,安全。我也很喜欢有这样性格的人。每天总是折腾到后半夜才睡觉,我何时能早睡觉,唉不说了。
--------------------------------------------------------------------------------------------
//ubuntu还原windows桌面风格方法
//关于面板的操作,同时按住徽标和alt键,再用鼠标右键点击面板&
sudo apt-get install gnome-session-fallback&恢复gonme-shell桌面风格,登录的时候选一下就可以了。
&sudo apt-get install&gconf-editor 配置编辑器,类似windows的注册表(regedit),在里面的找到&/apps/metacity/general&选项,把&button_layout&的值修改为&menu:minimize,maximize,close&,最大最小关闭窗口就可以调到右上角。&
最近的目标
&&&& 这个是一个背英语单词的软件,高考是他把我70分的英语提到了120.当时用的是旧版本,不过这个7.0貌似还没有出破解,希望能在暑假前把它拿下。注册部分是网络验证,真心略难。难其实还是因为我是个彩b。
&&上个之前的成果吧,起初我觉得很难很难得东西,根本没有想过我可以搞定,因为当时完全是个门外汉,但在努力看教程学习查资料之后还是搞定了,希望大家能和我一样,坚持下去,一定会为自己的进步吃惊的。
Win8 Release Preview版 6月1号发了
这个RP版本就是发行预览版,不知道啥时候出RTM版!
本地注册机制的几种风格
1.注册码注册机制
(1)固定注册码,唯一一个注册码,到谁的电脑上输入这个就注册成功。(基本淘汰了)
(2)根据具体机器的特征,经过某种算法,生成唯一的注册码(现在主流,共享软件常用的方法)
&1&简单:直接读取硬盘序列号,cpu特征码,mac地址等,再经过一个算法去生成真的注册码
&2&复杂:先根据这些硬件的特征码进过某种算法生成一个机器码,再由由机器码经过某种算法生成一个注册码。其实差球不多!
补充:关于真假码的比较。
不管程序咋加密,最终都要读取了用户输入的注册码,然后和真的注册码进行比较。这个比较分2种,明码比较和非明码比较。明码比较很简单,直接拿用户输入的注册码和真码进行比较,这样俩个注册码都会进入堆栈,所以我们就可以找到真的注册码。非明码比较就是,把注册码拆分成多个部分,然后取用户输入的注册码对应的部分,分别进行比较,最后把结果汇总,当且仅当都为真的时候,才可以注册。
此机制通常应用在一些小软件上,一个注册码并不限制机器使用,可以通用
2.重启验证机制&
INI重启类型 -----注册码存放在ini格式文件里
注册表重启类型---注册码存放于注册表
文件重启类型----注册码存放于自定义文件格式里
今天就这么多了,打一局睡觉吧。&
认识各语言的入口特征及加壳后的识别判断
C++入口特征
&&/$&&55&&&&&&&&&&&&&push&ebp
&&|.&&8BEC&&&&&&&&&&&mov&ebp,esp
0040802A&&|.&&6A&FF&&&&&&&&&&push&-0x1
0040802C&&|.&&68&F0F14000&&&&push&C++.
&&|.&&68&84AF4000&&&&push&C++.0040AF84&&&&&&&&&&&&&&&&&&&&&&&&;&&SE&处理程序安装
&&|.&&64:A1&&mov&eax,dword&ptr&fs:[0]
0040803C&&|.&&50&&&&&&&&&&&&&push&eax
0040803D&&|.&&64:&mov&dword&ptr&fs:[0],esp
&&|.&&83EC&58&&&&&&&&sub&esp,0x58
&&|.&&53&&&&&&&&&&&&&push&ebx
&&|.&&56&&&&&&&&&&&&&push&esi
&&|.&&57&&&&&&&&&&&&&push&edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&ntdll.7C930228
0040804A&&|.&&8965&E8&&&&&&&&mov&[local.6],esp
0040804D&&|.&&FF15&E4F04000&&call&dword&ptr&ds:[&&KERNEL32.GetVersion&;&&kernel32.GetVersion
&&|.&&33D2&&&&&&&&&&&xor&edx,edx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&ntdll.KiFastSystemCallRet
&&|.&&8AD4&&&&&&&&&&&mov&dl,ah
&&|.&&0&&mov&dword&ptr&ds:[0x416BD0],edx&&&&&&&&&&;&&ntdll.KiFastSystemCallRet
0040805D&&|.&&8BC8&&&&&&&&&&&mov&ecx,eax
0040805F&&|.&&81E1&FF000000&&and&ecx,0xFF
&&|.&&890D&CC6B4100&&mov&dword&ptr&ds:[0x416BCC],ecx
0040806B&&|.&&C1E1&08&&&&&&&&shl&ecx,0x8&
C++的入口函数GetVersion
C++的字符串采用ASCII码查找
C++的按钮事件采用查找SUB&EAX,0A&
汇编的入口特征&&
0040285E&&/$&&6A&00&&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/pModule&=&NULL
&&|.&&E8&970B0000&&&&call&&jmp.&kernel32.GetModuleHandleA&&&&&;&\GetModuleHandleA
&&|.&&A3&&&&&mov&dword&ptr&ds:[0x405428],eax
0040286A&&|.&&E8&F50C0000&&&&call&&jmp.&comctl32.InitCommonControls&&&;&[InitCommonControls
0040286F&&|.&&68&9D334000&&&&push&汇编.0040339D&&&&&&&&&&&&&&&&&&&&&&&&&;&/pTopLevelFilter&=&汇编.0040339D
&&|.&&E8&F50B0000&&&&call&&jmp.&kernel32.SetUnhandledExceptio&;&\SetUnhandledExceptionFilter
&&|.&&6A&00&&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/lParam&=&NULL
0040287B&&|.&&68&&&&&push&汇编.&&&&&&&&&&&&&&&&&&&&&&&&&;&|DlgProc&=&汇编.
&&|.&&6A&00&&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hOwner&=&NULL
&&|.&&6A&65&&&&&&&&&&push&0x65&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|pTemplate&=&65
&&|.&&FF35&&&push&dword&ptr&ds:[0x405428]&&&&&&&&&&&&&;&|hInst&=&NULL
0040288A&&|.&&E8&4B0C0000&&&&call&&jmp.&user32.DialogBoxParamA&&&&&&&&;&\DialogBoxParamA
0040288F&&|.&&6A&00&&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/ExitCode&=&0
&&\.&&E8&480B0000&&&&call&&jmp.&kernel32.ExitProcess&&&&&&&&&&;&\ExitProcess&&
汇编的入口API函数&&&GetModuleHandleA
汇编查找字符串使用&&&ASCII码&&
DLPHI入口特征
&&&$&&55&&&&&&&&&&&&&push&ebp
&&&.&&8BEC&&&&&&&&&&&mov&ebp,esp
0045D40B&&&.&&83C4&F0&&&&&&&&add&esp,-0x10
0045D40E&&&.&&B8&28D24500&&&&mov&eax,DELPHI.
&&&.&&E8&6088FAFF&&&&call&DELPHI.00405C78
&&&.&&A1&4CF14500&&&&mov&eax,dword&ptr&ds:[0x45F14C]
0045D41D&&&.&&8B00&&&&&&&&&&&mov&eax,dword&ptr&ds:[eax]
0045D41F&&&.&&E8&08DFFFFF&&&&call&DELPHI.0045B32C
&&&.&&8B0D&40F24500&&mov&ecx,dword&ptr&ds:[0x45F240]&&&&&&&&&&;&&DELPHI.00460C04
0045D42A&&&.&&A1&4CF14500&&&&mov&eax,dword&ptr&ds:[0x45F14C]
0045D42F&&&.&&8B00&&&&&&&&&&&mov&eax,dword&ptr&ds:[eax]
&&&.&&8B15&CCC84500&&mov&edx,dword&ptr&ds:[0x45C8CC]&&&&&&&&&&;&&DELPHI.
&&&.&&E8&08DFFFFF&&&&call&DELPHI.
0045D43C&&&.&&A1&4CF14500&&&&mov&eax,dword&ptr&ds:[0x45F14C]
&&&.&&8B00&&&&&&&&&&&mov&eax,dword&ptr&ds:[eax]
&&&.&&E8&7CDFFFFF&&&&call&DELPHI.
&&&.&&E8&2769FAFF&&&&call&DELPHI.00403D74
0045D44D&&&.&&8D40&00&&&&&&&&lea&eax,dword&ptr&ds:[eax]&
DELPHI入口特征&GetModuleHandleA
DELPHI查找按钮事件&右键--查找---查找二进制字符串740E8BD38B83????????FF93????????
采用CRTL+L键进行下翻页查找,需每一个都下上断
DELPHI&查找字符串采用ASCII码&
易语言入口特征&
&&/$&&55&&&&&&&&&&&&push&ebp
&&|.&&8BEC&&&&&&&&&&mov&ebp,esp
&&|.&&6A&FF&&&&&&&&&push&-0x1
&&|.&&68&B0C14600&&&push&易语言.
004464DB&&|.&&68&DCAC4400&&&push&易语言.0044ACDC&&&&&&&&&&&&&&&&&&&&&&&&;&&SE&处理程序安装
&&|.&&64:A1&0000000&mov&eax,dword&ptr&fs:[0]
&&|.&&50&&&&&&&&&&&&push&eax
&&|.&&64:&mov&dword&ptr&fs:[0],esp
004464EE&&|.&&83EC&58&&&&&&&sub&esp,0x58
&&|.&&53&&&&&&&&&&&&push&ebx
&&|.&&56&&&&&&&&&&&&push&esi
&&|.&&57&&&&&&&&&&&&push&edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&ntdll.7C930228
&&|.&&8965&E8&&&&&&&mov&[local.6],esp
&&|.&&FF15&&call&dword&ptr&ds:[&&KERNEL32.GetVersion&;&&kernel32.GetVersion
004464FD&&|.&&33D2&&&&&&&&&&xor&edx,edx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&ntdll.KiFastSystemCallRet
易语言入口API函数&GetVersion
注:停留下后,AIT+F9返回到用户代码后,查找2进制字符串FC&DB&E3&E8&??&??&??&??
易语言查找字符串采用ASCII码查找
注:多数易语言采用花指令对易格式体进行保护,所以在查找字符串之前尽量先去掉花指令,去花的OD插件 E&JUNk&CODE&&
VC8入口特征
00403A30&&&$&&E8&6E270000&&&call&VC8.
00403A35&&&.^&E9&79FEFFFF&&&jmp&VC8.
00403A3A&&/$&&55&&&&&&&&&&&&push&ebp
00403A3B&&|.&&8BEC&&&&&&&&&&mov&ebp,esp
00403A3D&&|.&&83EC&08&&&&&&&sub&esp,0x8
00403A40&&|.&&897D&FC&&&&&&&mov&[local.1],edi&&&&&&&&&&&&&&&&&&&&&&&&;&&ntdll.7C930228
00403A43&&|.&&8975&F8&&&&&&&mov&[local.2],esi
00403A46&&|.&&8B75&0C&&&&&&&mov&esi,[arg.2]
00403A49&&|.&&8B7D&08&&&&&&&mov&edi,[arg.1]&&&&&&&&&&&&&&&&&&&&&&&&&&;&&VC8.&ModuleEntryPoint&
00403A4C&&|.&&8B4D&10&&&&&&&mov&ecx,[arg.3]
00403A4F&&|.&&C1E9&07&&&&&&&shr&ecx,0x7&&
VC8入口特征查找&GetStartupInfoW
VC8查找字符串采用&Unicode码
VC8的按钮事件采用查找SUB&EAX,0A&&
VB入口特征
&&&.-&FF25&&jmp&dword&ptr&ds:[&&MSVBVM60.#613&]&&&&&&;&&msvbvm60.rtcVarStrFromVar
0040197E&&&.-&FF25&&jmp&dword&ptr&ds:[&&MSVBVM60.__vbaVarTst&;&&msvbvm60.__vbaVarTstEq
&&&.-&FF25&7C104000&jmp&dword&ptr&ds:[&&MSVBVM60.#528&]&&&&&&;&&msvbvm60.rtcUpperCaseVar
0040198A&&&.-&FF25&A8104000&jmp&dword&ptr&ds:[&&MSVBVM60.EVENT_SINK_&;&&msvbvm60.EVENT_SINK_QueryInterface
&&&.-&FF25&&jmp&dword&ptr&ds:[&&MSVBVM60.EVENT_SINK_&;&&msvbvm60.EVENT_SINK_AddRef
&&&.-&FF25&9C104000&jmp&dword&ptr&ds:[&&MSVBVM60.EVENT_SINK_&;&&msvbvm60.EVENT_SINK_Release
0040199C&&&$-&FF25&&jmp&dword&ptr&ds:[&&MSVBVM60.#100&]&&&&&&;&&msvbvm60.ThunRTMain
&&&&&&00&&&&&&&&&&&&db&00
&&&&&&00&&&&&&&&&&&&db&00
&&&$&&68&5C284000&&&push&VB.0040285C&&&&&&&&&&&&&&&&&&&&&&&&&;&&ASCII&"VB5!6&vb6chs.dll"
&&&.&&E8&EEFFFFFF&&&call&&jmp.&MSVBVM60.#100&
004019AE&&&.&&0000&&&&&&&&&&add&byte&ptr&ds:[eax],al
&&&.&&0000&&&&&&&&&&add&byte&ptr&ds:[eax],al
&&&.&&0000&&&&&&&&&&add&byte&ptr&ds:[eax],al
&&&.&&3000&&&&&&&&&&xor&byte&ptr&ds:[eax],al
&&&.&&0000&&&&&&&&&&add&byte&ptr&ds:[eax],al&
VB入口特征查找函数&ThunRTMain
VB&查找字符串时采用二进制字符串816C
注:识别VB&P-code编译时,只需要查找不到按钮事件就是P-CODE编译
P-CODE代码是虚拟代码,需要独立的调试器
Vb&查找字符串采用&UNICODE码查找&
DIE64类似于PEID的功能,但是他强大之处,在于他可以不管是任何壳保护的情况下,都可以识别出他的编写语言&
当程序提示说有压缩代码时,就表示程序已经被压缩或者加密&
看起来很凌乱,就像未解码的代码一样,VMP保护分两种方式,让代码
VMP在默认保护的情况下是不会保护功能代码的,并且VMP保护功能代码只是一个区段,如果大家看到的.VMP区段有三条的话,就表示此程序已经被VMP进行了最大保护,如果只是一条区段的话,那就是乱序保护,两条区段的话,就是乱序加虚拟保护
TMD2.10以后的版本和WL的版本入口都是一样&
&&&&83EC&04&&&&&&&&&sub&esp,0x4
&&&&50&&&&&&&&&&&&&&push&eax
&&&&53&&&&&&&&&&&&&&push&ebx
&&&&E8&&&&&&call&易语言.0060000B
0060000A&&&&CC&&&&&&&&&&&&&&int3
0060000B&&&&58&&&&&&&&&&&&&&pop&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&kernel32.7C817027
0060000C&&&&89C3&&&&&&&&&&&&mov&ebx,eax
0060000E&&&&40&&&&&&&&&&&&&&inc&eax
0060000F&&&&2D&00D00900&&&&&sub&eax,0x9D000
&&&&2D&&&&&&sub&eax,0x601817
&&&&05&0C186000&&&&&add&eax,0x60180C
0060001E&&&&803B&CC&&&&&&&&&cmp&byte&ptr&ds:[ebx],0xCC
&&&&75&19&&&&&&&&&&&jnz&short&易语言.0060003C
&&&&C603&00&&&&&&&&&mov&byte&ptr&ds:[ebx],0x0
&&&&BB&&&&&&mov&ebx,0x1000
0060002B&&&&68&C5D8FB58&&&&&push&0x58FBD8C5
&&&&68&&&&&&push&0x
&&&&53&&&&&&&&&&&&&&push&ebx
&&&&50&&&&&&&&&&&&&&push&eax
&&&&E8&0A000000&&&&&call&易语言.
0060003C&&&&83C0&00&&&&&&&&&add&eax,0x0
0060003F&&&&&&&&&&&mov&dword&ptr&ss:[esp+0x8],eax
&&&&5B&&&&&&&&&&&&&&pop&ebx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&kernel32.7C817027
&&&&58&&&&&&&&&&&&&&pop&eax&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&kernel32.7C817027
草他妈的苹果,把漏洞补上了,害我浪费3个小时时间!
iphone的降级
& & & &好久不搞iphone了,之前降级都是用tinyumbrella,感觉极其蛋疼,今天发现用sn0wbreeze大神的iREB更好.这是俩种机制,虽然二者都要用到shsh的备份,但其实iREB更好用.小雨伞是来伪装苹果验证的服务器实现降级,而iREB是用shsh签名一个固件文件,然后用Itunes恢复,这样可以省去很多网络验证方面的麻烦,所以还是要用iREB来搞.
& & &越了再解锁略蛋疼啊,再试试SAM继续给人家搞3GS,搞定睡觉!
孙鑫vc++第二课
&#include &iostream.h&class Point //定义一个叫Point的类{public:&Point() //这个叫Point类的构造函数,用来初始化对象{x=0;&y=0;}Point(int a,int b) //这个类的另一个构造函数(函数重载,根据对象传递的参数来选择调用 & &哪个构造函数){x=a;&y=b;}~Point() //析构函数,销毁对象,释放内存空间的时候调用的函数{}void output() &//这个类的一个方法{cout&&x&&endl&&y&&}void output(int x,int y) & //这个类的另一个方法{this-&x=x; & //this指针,指向对象本身this-&y=y;}};&void main(){Point pt(3,3);pt.output(5,5);& & & & pt.output();}未完,剩下的改天写.
我可以好好研究一下android的
站长在关注

我要回帖

更多关于 中级经济师考试 的文章

 

随机推荐