BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #35489同步于 2012/11/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

请问逆向工程的大牛,ida入门资料

ymc252669096
2012/11/19镜像同步15 回复
目前使用ida分析一个linux下的程序,初学中感觉很难。。。 中文资料除了看雪论坛有一点(不系统,看了不知所云),根本找不到中文资料。 时间紧迫,看英文已然来不及。。。 求大牛讲讲经验,谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ymc252669096机器人#1 · 2012/11/19
附件是待分析文件。 一共两个文件,运行前需要setuid。 然后在linux终端下运行(我是debian): ./target model.dat 结果是输出一句英文。 我贴一段运行演示: user@sandbox:~/project2$ ./target model.dat Sorry, ./target must be setuid root. user@sandbox:~/project2$ sudo chown root:root target user@sandbox:~/project2$ sudo chmod u+s target user@sandbox:~/project2$ ./target model.dat But if you need to convince an enemy to work with you, it's a good idea to make use of all costs. 要求:1.写一个文档说明此程序流程图。 2.自己写一个sploit.dat代替原来的model.dat,运行后能从user权限变为root权限。 我搞了将近一周了,还是不会。。。很沮丧,很慌张,希望大牛能给一点提示,谢谢啦。
RedOcean机器人#2 · 2012/11/19
非大牛,希望能够提供一些帮助。 1、IDA 5.5以上的版本有一个叫Hex-Rays的插件,可以对程序和函数进行“反编译”,帮助更加容易的读懂程序代码; 2、IDA中的String窗口能够帮助你发现一些可能有用的字符串; 3、在一些位置的数字可以通过转换成字符(按R键)帮助你读懂程序; 通过以上三条可以生成target的主体代码部分 ———————————————————————— signed int __cdecl sub_80487C0(int a1, int a2) { signed int result; // eax@3 int v3; // esi@5 int v4; // edi@6 int v5; // eax@7 size_t v6; // ebx@7 __pid_t v7; // eax@10 int v8; // [sp+1Ch] [bp-1074h]@6 __int16 v9; // [sp+2Eh] [bp-1062h]@7 char v10[20]; // [sp+102Eh] [bp-62h]@6 signed int v11; // [sp+1032h] [bp-5Eh]@6 signed int v12; // [sp+1036h] [bp-5Ah]@6 signed int v13; // [sp+103Ah] [bp-56h]@6 signed int v14; // [sp+103Eh] [bp-52h]@6 char v15; // [sp+1042h] [bp-4Eh]@6 char v16[20]; // [sp+1043h] [bp-4Dh]@5 signed int v17; // [sp+1047h] [bp-49h]@5 signed int v18; // [sp+104Bh] [bp-45h]@5 signed int v19; // [sp+104Fh] [bp-41h]@5 signed int v20; // [sp+1053h] [bp-3Dh]@5 char v21; // [sp+1057h] [bp-39h]@5 char *v22; // [sp+1058h] [bp-38h]@12 char *v23; // [sp+105Ch] [bp-34h]@12 char *v24; // [sp+1060h] [bp-30h]@12 int v25; // [sp+1064h] [bp-2Ch]@12 char v26; // [sp+1068h] [bp-28h]@12 char v27; // [sp+1069h] [bp-27h]@12 char v28; // [sp+106Ah] [bp-26h]@12 char v29; // [sp+106Bh] [bp-25h]@12 char v30; // [sp+106Ch] [bp-24h]@12 char v31; // [sp+106Dh] [bp-23h]@12 char v32; // [sp+106Eh] [bp-22h]@12 char v33; // [sp+106Fh] [bp-21h]@12 char v34; // [sp+1070h] [bp-20h]@12 char v35; // [sp+1071h] [bp-1Fh]@12 char v36; // [sp+1072h] [bp-1Eh]@12 char v37; // [sp+1073h] [bp-1Dh]@12 char v38; // [sp+1074h] [bp-1Ch]@12 char v39; // [sp+1075h] [bp-1Bh]@12 char v40; // [sp+1076h] [bp-1Ah]@12 char v41; // [sp+1077h] [bp-19h]@12 int v42; // [sp+1078h] [bp-18h]@12 int v43; // [sp+107Ch] [bp-14h]@15 if ( geteuid() ) { fprintf(stderr, "Sorry, %s must be setuid root.\n", *(_DWORD *)a2); result = 1; } else if ( a1 == 2 ) { *(_DWORD *)v16 = 'pmt/'; v17 = 'led/'; v18 = 'mete'; v19 = 'XX.e'; v20 = 'XXXX'; v21 = 0; v3 = mkstemp(v16); if ( v3 == -1 ) __assert_fail("fd != -1", "target.c", 0x1Eu, "main"); sub_8048720((int)&unk_8049160, n); write(v3, &unk_8049160, n); close(v3); *(_DWORD *)v10 = 'pmt/'; v11 = 'led/'; v12 = 'mete'; v13 = 'XX.e'; v14 = 'XXXX'; v15 = 0; v8 = mkstemp(v10); v4 = open(*(const char **)(a2 + 4), 0); if ( v4 == -1 ) __assert_fail("in != -1", "target.c", 0x26u, "main"); do { v5 = read(v4, &v9, 0x1000u); v6 = v5; if ( v5 < 0 ) __assert_fail("size >= 0", "target.c", ',', "main"); sub_8048720((int)&v9, v5); if ( v6 != write(v8, &v9, v6) ) __assert_fail("size == wsize", "target.c", '/', "main"); } while ( v6 == 4096 ); close(v8); close(v4); v7 = fork(); if ( v7 == -1 ) { remove(v16); perror("fork"); result = 1; } else { if ( !v7 ) { v26 = 'u'; v27 = '/'; v28 = ')'; v29 = '('; v30 = 'u'; v31 = '8'; v32 = '3'; v33 = '4'; v34 = 'u'; v35 = '*'; v36 = '#'; v37 = '.'; v38 = '2'; v39 = '5'; v40 = '4'; v41 = 'Z'; sub_8048720((int)&v26, 16); v23 = v16; v22 = &v26; v24 = v10; v25 = 0; v42 = 0; setuid(0); execve(&v26, &v22, (char *const *)&v42); _exit(1); } waitpid(v7, &v43, 0); remove(v16); result = 0; } } else { fprintf(stderr, "Usage: %s model.dat\n", *(_DWORD *)a2); result = 1; } return result; } —————————————————————————— 4、纯静态的使用IDA进行分析,可能不能快速的看懂程序的逻辑和调用结构,这是可以借助调试器动态的查看到底程序进行了什么操作。 5、如果想学习使用IDA,推荐一本《IDA Pro权威指南》,中文,各处网上书店有售。 6、(默默的喝了一口可乐),学妹(弟),我只能帮你到这了! 希望对你有所帮助。
CX3201机器人#3 · 2012/11/19
----------------------------- 先分析分析.dat里面是什么东西可能有帮助
rebirthatsix机器人#4 · 2012/11/19
纯路过
W1039766642机器人#5 · 2012/11/19
逆向工程。略虎。
ymc252669096机器人#6 · 2012/11/20
谢谢你的回复! 我使用的ida 5.0 pro free版本,不能用盗版。。。哎 整个程序的流程我分析出来了,正如你的c代码一样(要是我能早一点看到你的帖子就好了。。。呜呜) 但是中间有一小段汇编我实在看不出来想干嘛,很着急。。。 【 在 RedOcean 的大作中提到: 】 : 非大牛,希望能够提供一些帮助。 : 1、IDA 5.5以上的版本有一个叫Hex-Rays的插件,可以对程序和函数进行“反编译”,帮助更加容易的读懂程序代码; : 2、IDA中的String窗口能够帮助你发现一些可能有用的字符串; : ...................
ymc252669096机器人#7 · 2012/11/20
请问可以用什么方法查看model.dat呢?我试过notepad,或者用ida反汇编,都是乱码。。。dat不是标准后缀,请问您有木有好的办法?谢谢! 【 在 CX3201 的大作中提到: 】
ymc252669096机器人#8 · 2012/11/20
interesting_func: add esi, 1 sub ebx, 1 xor byte ptr [ecx], 5ah add ecx, 1 cmp edx, esi ja short interesting_func 看不懂的汇编代码中包含这个函数,我把他rename成interesting_func。 我看上去感觉像把一个字符数组中的每个byte都和5ah异或。但是这样做的目的是什么呢? 请问红海大牛指教!谢谢! 【 在 RedOcean 的大作中提到: 】 : 非大牛,希望能够提供一些帮助。 : 1、IDA 5.5以上的版本有一个叫Hex-Rays的插件,可以对程序和函数进行“反编译”,帮助更加容易的读懂程序代码; : 2、IDA中的String窗口能够帮助你发现一些可能有用的字符串; : ...................
ymc252669096机器人#9 · 2012/11/20
红海牛,接着上面:它在调用刚才那个函数后,又调用了下列函数(shift是我自己命的名) shift: sub edi, edx mov esi, edi shr esi, 2 mov [ebp+var_10], edi lea edi, [esi*4+0] test edi, edi jz short loc_804878 esi右移2,应该是除以4吧?这个函数又用来干嘛呢? 然后我彻底懵了:shift函数完了之后,又调用了下列函数。 interesting_func3: xor dword ptr [eax+edx*4], 5a5a5a5ah add edx, 1 cmp edx, esi jb short interesting_func3 这次是双字异或,目的是什么呢?两次异或不就回去了吗?是因为想压缩吗(乱猜的)?5a是字符‘Z’的asc码,是不是和这个有关系呢? 【 在 RedOcean 的大作中提到: 】 : 非大牛,希望能够提供一些帮助。 : 1、IDA 5.5以上的版本有一个叫Hex-Rays的插件,可以对程序和函数进行“反编译”,帮助更加容易的读懂程序代码; : 2、IDA中的String窗口能够帮助你发现一些可能有用的字符串; : ...................