吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5439|回复: 6
收起左侧

[其他转载] 只是为了学习,逆向C代码

 关闭 [复制链接]
baronG 发表于 2010-8-11 15:54
本帖最后由 baronG 于 2010-8-11 16:20 编辑

如题,就是练习逆向而已....
某个例子代码
 
#include "stdio.h"
char * itobs(int,char *);
void show_bstr(const char *);
int main(void)
{
char bin_str[8 * sizeof(int)+1]; //4*8+1 == 33字节 int类型为4字节,8位表示一个字节 so 4*8+1=='\0'
int number; 
/************************************************************************/
/* 004113F8 8B F4            mov         esi,esp 
004113FA 8D 45 C8         lea         eax,[ebp-38h] //获得系统分配给number变量的首地址 
004113FD 50               push        eax  
004113FE 68 4C 57 41 00   push        41574Ch 
00411403 FF 15 C4 82 41 00 call        dword ptr ds:[004182C4h] 
scanf函数,获得整数返回1 ,否则返回0
00411409 83 C4 08         add         esp,8 
*/
/************************************************************************/
while (scanf("%d",&number) == 1)
{
  itobs(number,bin_str); //传入数字和33个元素的char型数组
  printf("%d is ",number);//输出整数
  show_bstr(bin_str);
  putchar('\n');
}
puts("bYe!");
return 0;
}
char * itobs(int n,char *ps)
{
int i;
static int size = 8 * sizeof (int);
for (i = size -1;i>=0;i--,n>>=1)
  ps[i] = (01 & n) + '0';
ps[size] = '\0';
return ps;
}
void show_bstr (const char * str)
{
int i =0;
while (str[i])
{
  putchar(str[i]);
  if (++i%4 == 0 && str[i])
   putchar (' ');
}
}


OD里面 某些标注...自己编译了 就知道了 =。=  ide,vs2008 sp1
 
自定义注释
地址       反汇编                                    注释
004111D1   JMP itobs                                 itobs
004113FD   PUSH EAX                                  变量number地址
004113FE   PUSH 0041574C                             接受的变量,类型
0041140C   CMP ESI,ESP                               平衡堆栈
00411413   CMP EAX,1                                 if eax >1 then jmp 00411465
00411418   LEA EAX,DWORD PTR SS:[EBP-2C]             字符数组变量 首地址获得~
0041141B   PUSH EAX                                  rt1
0041141C   MOV ECX,DWORD PTR SS:[EBP-38]             获取变量的值
00411420   CALL 004111D1                             转换到进制的功能函数
0041159E   MOV EAX,DWORD PTR DS:[size]               size 大小~
004115A6   MOV DWORD PTR SS:[EBP-8],EAX              变量i
004115AB   MOV EAX,DWORD PTR SS:[EBP-8]              eax == [ebp-8] == i
004115AE   SUB EAX,1                                 i-1
004115B1   MOV DWORD PTR SS:[EBP-8],EAX              i == i-1
004115B4   MOV ECX,DWORD PTR SS:[EBP+8]              number
004115B7   SAR ECX,1                                 number>>1
004115B9   MOV DWORD PTR SS:[EBP+8],ECX              number = number>>1
004115BC   CMP DWORD PTR SS:[EBP-8],0                if [ebp-8]<0 the jl 004115d5
004115C5   AND EAX,1                                 0位 与1异或,进行进制位的运算
004115C8   ADD EAX,30                                0的ascii +是因为转换成字符,可以放到字符数组中
004115CB   MOV ECX,DWORD PTR SS:[EBP+C]              ps的字符串数组的首地址
004115CE   ADD ECX,DWORD PTR SS:[EBP-8]              ps[1f] 就是 ps[31]
004115D1   MOV BYTE PTR DS:[ECX],AL                  ps[if] = number&1+ascii '0'
004115D5   MOV EAX,DWORD PTR SS:[EBP+C]              eax = array[?]
004115D8   ADD EAX,DWORD PTR DS:[size]               eax = array+size
004115DE   MOV BYTE PTR DS:[EAX],0                   数组位置最后一位为0
0041162E   MOV DWORD PTR SS:[EBP-8],0                var_a = 0;
00411635   MOV EAX,DWORD PTR SS:[EBP+8]              show_binary_point
00411638   ADD EAX,DWORD PTR SS:[EBP-8]              str[i] == str[0]
0041165E   MOV EAX,DWORD PTR SS:[EBP-8]              获得var_a
00411661   ADD EAX,1                                 var_a +1;
00411664   MOV DWORD PTR SS:[EBP-8],EAX              写入var_a的新值
00411679   JNZ SHORT 0041169C                        (初始 CPU 选择)
静心学习....
感谢Z同学的解答~

也许明天开始 逆向数据结构吧~~

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

deicezhu 发表于 2010-9-1 15:11
哦,学习了。谢谢。
stl88083365 发表于 2010-9-1 19:15
小云哥哥的眼泪 发表于 2010-9-2 08:58
kklds 发表于 2010-10-5 20:33
看不懂!
jeremy105 发表于 2010-12-28 16:27
看着好晕啊..来学习一下
赤目狂人 发表于 2011-1-10 12:30
给保存到一文本文档了!以后研究,现在水平太菜了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表