scanf/fscanf/vscanf 在调shellcode的时候的问题

今天在调shellcode的时候遇到了一个小问题,shellcode的逻辑功能没有任何问题,但是用的时候无法执行。在OD里面调的时候发现,shellcode的后半段变成了cccc… 于是分析了下代码,发现是shellcode中有个bit是0b,然后在读取完之后变成了00cccc char password[1024]; FILE * fp; if(!(fp=fopen(“password.txt”,”rw+”))) { printf(“test\n”); exit(0); } fscanf(fp,”%s”,password); 后面password会导致溢出 shellcode从password.txt中传入,最后发现是fscanf的问题导致的 上网看了下fscanf的源码发现和scanf一样都是调用vscanf,然后当以“%s”读取字符串的时候会把某些字符解析成了有含义的符号: Hex Dec Ctrl Name 0x09 9 ^I Tab 0x0A 10 ^J Line Feed 0x0B 11 ^K Verticle Feed 0x0C 12 ^L Form Feed 0x0D 13 ^M Carriage Return 0x1A 26 ^Z End of File 0x20 32 Space 神奇的发现读取“00”的时候并没有问题,然后出了%s,其他几个格式化字符: %d — […]

windows下获取dll中函数地址的方法

在windows下面调试shellcode的时候需要查找一些函数的地址,这里总结下可以用的方法: 1、微软的depents工具: http://www.dependencywalker.com/ 这个在xp上应该没问题 但是在64位win7之后的系统会报错,github上有人写了新的工具解决了这个问题(https://github.com/lucasg/Dependencies) 但是我这个软件读出来的地址不是正确的函数地址,具体原因未知,待测试   2、在调试的时候直接在OD中查找函数地址 使用ctrl+G 直接搜索函数名,如果有该函数会直接跳转到函数对应的地址上 这里可能会有几个问题: 1、ctrl+G 要在loadDLL之后执行,不然没有加载dll,会找不到对应函数 2、win7之后启用ASLR,每次的地址会随机加载(dll的基址随机)————>目前还没遇到这个问题   3、把需要使用的api函数写个简单的c++程序,然后调试获取到最终函数的调用地址   随时更新