首页
社区
课程
招聘
[讨论]这是我写的两个函数 请各位指教 能还原成c代码最好
发表于: 2014-8-1 10:08 4746

[讨论]这是我写的两个函数 请各位指教 能还原成c代码最好

2014-8-1 10:08
4746
00401000 >/$ 55             PUSH EBP
00401001  |. 8BEC           MOV EBP,ESP
00401003  |. 83EC 6C        SUB ESP,6C
00401006  |. A1 00304000    MOV EAX,DWORD PTR DS:[__security_cookie]
0040100B  |. 33C5           XOR EAX,EBP
0040100D  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
00401010  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
00401017  |. EB 09          JMP SHORT w5.00401022
00401019  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
0040101C  |. 83C0 01        |ADD EAX,1
0040101F  |. 8945 FC        |MOV DWORD PTR SS:[EBP-4],EAX
00401022  |> 837D FC 5F      CMP DWORD PTR SS:[EBP-4],5F
00401026  |. 7D 0F          |JGE SHORT w5.00401037
00401028  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
0040102B  |. 83C1 20        |ADD ECX,20
0040102E  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]
00401031  |. 884C15 98      |MOV BYTE PTR SS:[EBP+EDX-68],CL
00401035  |.^EB E2          \JMP SHORT w5.00401019
00401037  |> 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
0040103B  |. 83C0 08        ADD EAX,8
0040103E  |. 83F8 7E        CMP EAX,7E
00401041  |. 7E 18          JLE SHORT w5.0040105B
00401043  |. 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
00401047  |. 83C0 08        ADD EAX,8
0040104A  |. 99             CDQ
0040104B  |. B9 7E000000    MOV ECX,7E
00401050  |. F7F9           IDIV ECX
00401052  |. 8A5415 97      MOV DL,BYTE PTR SS:[EBP+EDX-69]
00401056  |. 8855 97        MOV BYTE PTR SS:[EBP-69],DL
00401059  |. EB 0A          JMP SHORT w5.00401065
0040105B  |> 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
0040105F  |. 83C0 08        ADD EAX,8
00401062  |. 8845 97        MOV BYTE PTR SS:[EBP-69],AL
00401065  |> 8A45 97        MOV AL,BYTE PTR SS:[EBP-69]
00401068  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0040106B  |. 33CD           XOR ECX,EBP
0040106D  |. E8 E1000000    CALL w5.__security_check_cookie
00401072  |. 8BE5           MOV ESP,EBP
00401074  |. 5D             POP EBP
00401075  \. C3             RETN
00401076     CC             INT3
00401077     CC             INT3
00401078     CC             INT3
00401079     CC             INT3
0040107A     CC             INT3
0040107B     CC             INT3
0040107C     CC             INT3
0040107D     CC             INT3
0040107E     CC             INT3
0040107F     CC             INT3
00401080 >/$ 55             PUSH EBP
00401081  |. 8BEC           MOV EBP,ESP
00401083  |. 83EC 6C        SUB ESP,6C
00401086  |. A1 00304000    MOV EAX,DWORD PTR DS:[__security_cookie]
0040108B  |. 33C5           XOR EAX,EBP
0040108D  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
00401090  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
00401097  |. EB 09          JMP SHORT w5.004010A2
00401099  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
0040109C  |. 83C0 01        |ADD EAX,1
0040109F  |. 8945 FC        |MOV DWORD PTR SS:[EBP-4],EAX
004010A2  |> 837D FC 5F      CMP DWORD PTR SS:[EBP-4],5F
004010A6  |. 7D 0F          |JGE SHORT w5.004010B7
004010A8  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
004010AB  |. 83C1 20        |ADD ECX,20
004010AE  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]
004010B1  |. 884C15 98      |MOV BYTE PTR SS:[EBP+EDX-68],CL
004010B5  |.^EB E2          \JMP SHORT w5.00401099
004010B7  |> 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
004010BB  |. 83E8 08        SUB EAX,8
004010BE  |. 83F8 20        CMP EAX,20
004010C1  |. 7D 1E          JGE SHORT w5.004010E1
004010C3  |. 0FBE4D 08      MOVSX ECX,BYTE PTR SS:[EBP+8]
004010C7  |. 83E9 20        SUB ECX,20
004010CA  |. BA 08000000    MOV EDX,8
004010CF  |. 2BD1           SUB EDX,ECX
004010D1  |. B8 5F000000    MOV EAX,5F
004010D6  |. 2BC2           SUB EAX,EDX
004010D8  |. 8A4C05 98      MOV CL,BYTE PTR SS:[EBP+EAX-68]
004010DC  |. 884D 97        MOV BYTE PTR SS:[EBP-69],CL
004010DF  |. EB 0A          JMP SHORT w5.004010EB
004010E1  |> 0FBE55 08      MOVSX EDX,BYTE PTR SS:[EBP+8]
004010E5  |. 83EA 08        SUB EDX,8
004010E8  |. 8855 97        MOV BYTE PTR SS:[EBP-69],DL
004010EB  |> 8A45 97        MOV AL,BYTE PTR SS:[EBP-69]
004010EE  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
004010F1  |. 33CD           XOR ECX,EBP
004010F3  |. E8 5B000000    CALL w5.__security_check_cookie
004010F8  |. 8BE5           MOV ESP,EBP
004010FA  |. 5D             POP EBP
004010FB  \. C3             RETN

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
IDA F5
2014-8-1 10:15
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
也不说说你的函数是干什么的?
如果有用处到可以看看......
2014-8-1 10:22
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没啥用  写着玩的

主要是想看看  能不能从反汇编代码中推断出源代码
2014-8-1 10:36
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
想看看 能不能直接推导出源代码  而不是靠工具
2014-8-1 10:37
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
参阅《天书夜读》
2014-8-1 11:05
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
你这个肯定可以推出源代码的呀
这么简单的函数,拿 来逆向,不明白嘛意思,
没事干,给逆向了一下第一个函数,这个函数好像有错误,估计是乱写的,纯手工打造,没有使用od,ida,f5一类

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

unsigned char test( unsigned char argv0)
{
	char			temp[0x5f];
	unsigned char	temp_0x69;

	for( int i = 0;i<0x5f;++i)
	{
		temp[i]  = i+0x20;
	}


	if( argv0 + 8 > 0x7e )
	{
		
		temp_0x69 = temp[(argv0+8)%0x7e];
	}else
	{
		temp_0x69 = argv0+8;
	}
	return temp_0x69;
}
//优化,目测,函数有问题,因为temp变量长度不够0x7e
char test2( char argv0)
{
	char	temp[0x60]={0};//max 0x6c

	for( int i = 0;i<0x5f;++i)
	{
		temp[i]  = i+' ';
	}

	if( argv0 + 8 > 0x7e )
	{
		return temp[(argv0+8)%0x7e];
	}else
	{
		return argv0+8;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{

	char r =test2(0x7e+1);


	return 0;
}



逆向过程

00401000 >/$ 55             PUSH EBP
00401001  |. 8BEC           MOV EBP,ESP
char temp[0x68];
00401003  |. 83EC 6C        SUB ESP,6C
00401006  |. A1 00304000    MOV EAX,DWORD PTR DS:[__security_cookie]
0040100B  |. 33C5           XOR EAX,EBP
0040100D  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX

//i=0
00401010  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0		


00401017  |. EB 09          JMP SHORT w5.00401022

//i++
00401019  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
0040101C  |. 83C0 01        |ADD EAX,1
0040101F  |. 8945 FC        |MOV DWORD PTR SS:[EBP-4],EAX

i<0x5f
00401022  |> 837D FC 5F      CMP DWORD PTR SS:[EBP-4],5F
00401026  |. 7D 0F          |JGE SHORT w5.00401037
{

BYTE value=(i+0x20)
00401028  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
0040102B  |. 83C1 20        |ADD ECX,20

temp[i] = value;
0040102E  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]
00401031  |. 884C15 98      |MOV BYTE PTR SS:[EBP+EDX-68],CL
}
00401035  |.^EB E2          \JMP SHORT w5.00401019

//BYTE argu0
00401037  |> 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]


if(argu0+8>0x7e)
0040103B  |. 83C0 08        ADD EAX,8
0040103E  |. 83F8 7E        CMP EAX,7E
00401041  |. 7E 18          JLE SHORT w5.0040105B
{
unsigned __int64 a0=argu0+8
00401043  |. 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
00401047  |. 83C0 08        ADD EAX,8
0040104A  |. 99             CDQ

temp[0] = temp[a0%0x7e]
0040104B  |. B9 7E000000    MOV ECX,7E
00401050  |. F7F9           IDIV ECX
00401052  |. 8A5415 97      MOV DL,BYTE PTR SS:[EBP+EDX-69]
00401056  |. 8855 97        MOV BYTE PTR SS:[EBP-69],DL
}
00401059  |. EB 0A          JMP SHORT w5.00401065
else
{
temp[0] = argu0+8;
0040105B  |> 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+8]
0040105F  |. 83C0 08        ADD EAX,8
00401062  |. 8845 97        MOV BYTE PTR SS:[EBP-69],AL
}

return temp[0];
00401065  |> 8A45 97        MOV AL,BYTE PTR SS:[EBP-69]
00401068  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0040106B  |. 33CD           XOR ECX,EBP
0040106D  |. E8 E1000000    CALL w5.__security_check_cookie
00401072  |. 8BE5           MOV ESP,EBP
00401074  |. 5D             POP EBP
00401075  \. C3             RETN
2014-8-1 11:54
0
游客
登录 | 注册 方可回帖
返回
//