专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

通过调用栈对软件爆破,以后不用总是搜索字符串了

  基础知识栈
  栈是操作系统在运行时自动初始化的一块区域,是数据暂时存储的的动态内存区域。它的大小在Windows操作系统下由PE文件结构中PE文件头中IMAGEOPTIONALHEADER结构中SizeOfStackReserve字段所定义。在OD中,要想顺利分析软件的功能,在单步需要关注的便是寄存器和栈空间。下面,我们来看一下软件是怎么利用栈的。函数的调用过程
  我们用一个充满函数的小软件来研究函数的调用,源代码如下:复制代码隐藏代码includeiostreamincludecstdioincludecstdlibincludewindows。husingnamespacestd;intfunction(inta,intb);这是第一个函数,揭示控制台应用程序函数调用过程intWINAPIwinfunction(inta,intb);winapi调用方式intcdeclcfunction(inta,intb);c函数方式intstdcallcppfunction(inta,intb);c函数方式intfastcallffunction(inta,intb);寄存器函数方式intstdcallstdfunction(inta,intb);其实就是WINAPI调用方式intmyfunction(inta,intb);递归调用演示intmain(){inta;intb;printf(定位汇编代码);scanf(d,a);scanf(d,b);scanf方便找汇编代码winfunction(a,b);cfunction(a,b);cppfunction(a,b);ffunction(a,b);stdfunction(a,b);myfunction(a,b);return0;}intfunction(inta,intb){intcab;加法运算最简单returnc;}intWINAPIwinfunction(inta,intb){intcab;加法运算最简单returnc;}intcdeclcfunction(inta,intb){intcab;加法运算最简单returnc;}intstdcallcppfunction(inta,intb){intcab;加法运算最简单returnc;}intfastcallffunction(inta,intb){intcab;加法运算最简单returnc;}intstdcallstdfunction(inta,intb){intcab;加法运算最简单returnc;}intmyfunction(inta,intb){a;b;myfunction(a,b);}
  将编译出的软件用OD载入,通过API定位至调用语段:
  简单分析一下,易得:复制代码隐藏代码0040159A8B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)0040159D8B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015A089542404movdwordptrss:〔esp0x4〕,edx;将EDX内容压入栈,就是我输入的b(2)004015A4890424movdwordptrss:〔esp〕,eax;将EAX内容压入栈,就是我输入的a(1)004015A7E881000000call未命名1。0040162D;WINAPI调用方式004015AC83EC08subesp,0x8;恢复堆栈004015AF8B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)004015B28B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015B589542404movdwordptrss:〔esp0x4〕,edx;将EDX内容压入栈,就是我输入的b(2)004015B9890424movdwordptrss:〔esp〕,eax;将EAX内容压入栈,就是我输入的a(1)004015BCE884000000call未命名1。00401645;c函数方式004015C18B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)004015C48B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015C789542404movdwordptrss:〔esp0x4〕,edx;将EDX内容压入栈,就是我输入的b(2)004015CB890424movdwordptrss:〔esp〕,eax;将EAX内容压入栈,就是我输入的a(1)004015CEE888000000call未命名1。0040165B;c函数方式004015D383EC08subesp,0x8;恢复堆栈004015D68B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)004015D98B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015DC89C1movecx,eax;将EAX寄存器的值放入ECX004015DEE890000000call未命名1。00401673;寄存器方式004015E38B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)004015E68B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015E989542404movdwordptrss:〔esp0x4〕,edx;将EDX内容压入栈,就是我输入的b(2)004015ED890424movdwordptrss:〔esp〕,eax;将EAX内容压入栈,就是我输入的a(1)004015F0E89A000000call未命名1。0040168F;stdcall调用方式004015F583EC08subesp,0x8;恢复堆栈004015F88B55F0movedx,dwordptrss:〔ebp0x10〕;将scanf的结果放入EDX(b)004015FB8B45F4moveax,dwordptrss:〔ebp0xC〕;将scanf的结果放入EAX(a)004015FE89542404movdwordptrss:〔esp0x4〕,edx;将EDX内容压入栈,就是我输入的b(2)00401602890424movdwordptrss:〔esp〕,eax;将EAX内容压入栈,就是我输入的a(1)00401605E89D000000call未命名1。004016A7;递归调用
  然后我们随意跟进一个函数,如图(我选择的是C函数方式)
  简单分析,易得:复制代码隐藏代码0040164555pushebp;ebp入栈保护现场0040164689E5movebp,esp;保存栈指针0040164883EC10subesp,0x10;设置栈指针0040164B8B5508movedx,dwordptrss:〔ebp0x8〕;从栈中读入edx(a)0040164E8B450Cmoveax,dwordptrss:〔ebp0xC〕;从栈中读入eax(b)0040165101D0addeax,edx;将eax和ebx相加,读入eax004016538945FCmovdwordptrss:〔ebp0x4〕,eax;保存eax的值入栈准备引用(c)004016568B45FCmoveax,dwordptrss:〔ebp0x4〕;将c作为返回值放入eax00401659C9leave;恢复栈0040165AC3retn;函数返回
  综上所述,我们可以得到以下几点:
  1。大多数调用协定都将栈作为参数传递的途径
  2。在进入一个函数时执行call指令就是做了两步:
  (1)将下一行指令地址压入栈
  (2)跳转到call后的地址
  3。将eax作为返回值
  4。return指令实际做的事:
  (1)跳转到栈顶的那个地址
  (2)栈顶中的地址出栈
  所以,函数为了返回必定要用栈,分析栈也就可以知道函数是从哪调用的。正式开始调用栈
  栈不止可以用于函数调用,临时数据的存储都是用栈,但是,栈中为了函数调用的部分称为调用栈,用调用栈可以分析函数是从哪里调用的。OD对调用栈的支持
  快捷键(AltK)
  如图便是OD的调用栈窗口
  第一行是Main函数里的函数
  第二行是Main函数调用栈找地址法原理
  通过调用栈,我们可以知道函数是从哪里调用的,便可以知道是哪里触发了函数,便可轻易找到是哪里判断了注册码是正确还是错误的。实战调用栈法
  我又写了一个小程序,源码如下(验证部分和我上次发帖的一样):复制代码隐藏代码includeiostreamincludecstdioincludecstdlibincludestringincludewindows。husingnamespacestd;intcheck(stringusername,stringsn);检测注册码正确性intregiste();注册界面inthelp();帮助界面intmain(){cout1。注册endl2。帮助endl;intchoose;cinchoose;if(choose1){registe();}elseif(choose2){help();}else{cout没有这个选项!endl;system(pause);}return0;}inthelp(){cout这只是个帮助endl;system(pause);return0;}intregiste(){stringusername,sn;cout请输入用户名:endl;cinusername;cout请输入序列号:endl;cinsn;check(username,sn);system(pause);return0;}intcheck(stringuser,stringsn){for(inti0;iuser。length();i){for(intj0;jsn。length();j){if(user〔i〕1!sn〔i〕){MessageBox(NULL,序列号错误,失败,MBOK);return0;}}}MessageBox(NULL,序列号正确,成功,MBOK);return1;}
  OD载入,运行
  在弹出错误框后,暂停,打开调用栈
  可以看出,从我的exe调用的而非系统dll调用的最上层的调用来自:
  未命名1。004018B2,其中未命名1为我的程序名。
  进入004018B2
  看到上面将序列号错误压入了栈,所以我们判断这个call显示了这个弹窗,所以我们想要跳过这个call,而它上面就有一个je跳转,我们改为jmp看一下。
  至此,软件爆破完成!感兴趣的同学可以尝试分析一下剩余的语句的功能,对自己的能力提升是有帮助的。结语
  调用栈破解法很常用,学会了它,你就不用总是搜索字符串了。现在,自己找个CrackMe或编译我提供的源代码试一试吧,祝你好运!

李湘晒女儿英国宿舍,王诗龄独享一个豪华房间,是皇室公主居住的今天,李湘在自己的社交网站上晒出送女儿开学的画面,吸引不少人的围观,因为李湘女儿王诗龄所上的大学可是贵族皇室学校,网友们自然是想要目睹一番学校的风采。李湘还晒出了女儿的宿舍,并且是闫学晶27岁儿媳豪宅内养胎,穿金戴银好富贵,摸皮球孕肚母爱满满饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!9月6日,闫学晶的儿媳徐梦迪在社交平台上开直播,与外界分享自己的孕期生活。直播中的徐梦迪素面朝天,皮肤白到发光,状态非常欧文女儿将参与新真人秀节目录制,球迷们又有眼福啦据报道,欧文二女儿吉玛欧文将参与一档以足球运动员女儿的生活为主题的新综艺的录制,还有可能搭档英格兰传奇球星保罗加斯科因的女儿比安卡加斯科因。刚刚在恋爱综艺爱之岛中夺得亚军的吉玛欧文1963年肯尼迪葬礼3岁儿子向灵柩敬礼,杰奎琳和6岁女儿长跪不起在美国历史上那些遇刺身亡的总统中,肯尼迪是最惨的一个。凶手连着射击三次,一次打中他的脖子大动脉,一次击中他的头颅,头盖骨被掀翻。那时,为了连任拉选票,他坚持乘坐敞篷车,这样可以和支王者荣耀中,你觉得自己哪个瞬间carry了队友?头条创作挑战赛大概就是被KPL冠军队伍BA黑凤梨9分钟推爆的光荣战绩叭?话不多说,直接放战绩图。2017年左右龙珠直播举办了第一届王者荣耀LSL星联赛。那时候BA还没进KPL,但是Demetrios2023婚纱系列时尚新娘的最爱2023Demetrios新娘系列完美融合了精致浪漫和迷人的细节,令人惊叹。拥有令人眼花缭乱的各种廓形领口袖子面料和个性化选择,我们认为这些华丽的礼服将很快成为喜爱戏剧性细节的时尚康熙看望50岁的哥哥,刚走不久哥哥对儿子说我的心愿总算了了在一个人的生命当中,最幸福的时光莫过于童年,成年后闲暇之时首先回忆起的便是那段快乐时光,或许童年时的生活条件远不及现在,但那份快乐与无忧无虑是最珍贵的。常言道最是无情帝王家,在历史杨俊勇丧父丧母又丧妻,没等到儿子娶妻就离世,一生比黄连还苦杨俊勇丧父丧母又丧妻,没等到儿子娶妻就离世,一生比黄连还苦原创202206081536凉薯不凉文凉薯编辑凉薯不凉杨俊勇十年生死两茫茫,不思量,自难忘这是苏轼的一首词,后人对于这位大我,福建人,在非洲当厂长,曾被黑人用枪抵着,这里穷得只剩钻石这是我们讲述的第768位真人的故事我是阿钦阿钦海外生活,98年因家中欠下巨债,迫不得已出国打工,临行的前一天遭遇抢劫,我滚出数米血染衣衫。为了不损失3万块钱的劳务费,我忍着一身伤痛罚罪看到二十二集,常征是赵啸声的儿子,还是大王的儿子?罚罪追到二十二集,赵啸声手中握着的54张扑克牌人物中,小王已经出现,就是原滨江省昌武市市委书记滨江省政协副主席的郑广天。黑桃A是滨江省昌武市市政府副秘书长庆成林,黑桃J是滨江省昌武王者不愧是顶流手游,单单音效设计这一块,就涉及了这么多东西大家都知道,王者荣耀是当今人气最高的手游,没有之一。在这几年里,王者荣耀的人气都是顶尖的,其它手游只能望尘莫及,回想了一下以前的王者荣耀,现在的游戏机制真的完善了许多,玩家们的游戏
卫冕难度增加欧冠改革后对冠军的影响为什么欧冠改制后,卫冕欧冠冠军那么难?欧洲冠军联赛(UEFAChampionsLeague)是欧洲足球协会足球联赛中最高级别和最具影响力的赛事之一,由欧洲足球协会主办。欧冠赛制改革谢晖闷声发大财!前法国国脚和德甲王牌成大连新援热门,值得期待日前,大连队主帅谢晖正在欧洲学习取经,他频频现身五大联赛焦点战役现场。很显然,谢晖希望通过观看高水平的比赛,来弥补自己执教能力上的短板。谢晖是一位非常有思想的主教练,上赛季接手大连阿莱格里我们必须意识到目前在积分榜的位置,球队现在积23分直播吧1月30日讯尤文本轮联赛02不敌蒙扎,3轮不胜积23分排在第13位,阿莱格里赛后表示球队必须意识到现在的排名。阿莱格里说道我们从未踢过像这样的上半场,我们应该反思一下,中场休迈尔斯球队不存在明显短板但只要看到有意义的交易就会下手直播吧1月30日讯近日勇士总经理迈尔斯接受了随队记者MadelineKenney采访。谈到交易截止日,迈尔斯表示我们不知道最后会发生什么,这将是很有趣的,我不会说,好吧,我们必须采球队有意签伊斯科!柏林联队长胜利送给伊斯科,后者回复加油直播吧1月29日讯在本轮结束的一场德甲联赛中,柏林联合20击败柏林赫塔,目前高居德甲联赛次席。柏林联合队长特里梅尔赛后在个人社媒晒出了全队庆祝胜利的合影,配文写道这场胜利送给伊斯科街霸6Manon主题曲公布6月2日正式发售今日(1月31日),街头霸王官方推特公布街霸6角色Manon主题曲,街头霸王6将于2023年6月2日发售,登陆PCPS5PS4XSXXBOXOne平台,街头霸王6由至今为止系列中没缪伊雯缺训首度发声!直言永远相信童话,强于昔日李盈莹是谬论中国女排2023年集训名单出炉以后,缪伊雯虽说在集训名单当中,可被标注为暂不参与集训,而缪伊雯也在缺训后首度发声,写道永远相信童话,抓住新年的尾巴祝愿大家新的一年可以成为最厉害的大主帅泰伦卢玩转比赛?轮休多名主力,快船23惨败于骑士北京时间1月30日,快船客场背靠背挑战骑士,也许是上一场在亚特兰大老鹰主场带走了一场胜利,本场快船主教练轮休莱昂纳德乔治等多名主力球员,最终快船受限实力不济,99122不敌骑士终结法甲第20轮综述大巴黎补时被绝平强强对话马赛战平摩纳哥今天凌晨,法甲第20轮全部结束,十人大巴黎主场遭兰斯补时绝平,布雷斯特大胜昂热,里昂蒙彼利埃均取胜。昨天凌晨作赛三场,洛里昂主场一球小胜雷恩,朗斯客场战平特鲁瓦,马赛与摩纳哥的焦点西汉和东汉的首都在哪里?西汉改过一次,东汉改过两次西汉的首都是洛阳和长安,东汉的首都是洛阳长安和许昌。西汉于公元前202年建立,初定都洛阳,后刘邦在娄敬和张良的建议下迁都长安,在公元前200年正式迁往长安。东汉于公元25年建立,定新婚丈夫牺牲,为撑起家,妻子改嫁,30年后祭拜丈夫,她嚎啕大哭1984年,一位新婚3天的战士,在对越反击战的战场中英勇牺牲。让所有人没想到的是,这位战士的妻子竟然改嫁给了他的亲哥哥。可是,30年后,这个女人在祭拜当年在战场上牺牲的丈夫时,竟然
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网