首页
社区
课程
招聘
请帮忙看看下面这段C代码是什么意思。应如何翻译为pascal
发表于: 2015-9-23 14:32 3176

请帮忙看看下面这段C代码是什么意思。应如何翻译为pascal

2015-9-23 14:32
3176
代码是IDA 直接F5得到的。传入参数:char *datac; guint32 data_len;


char v10;
int i;
int ia;
int per;
char tmp;
unsigned __int8 *tar;
 
per = (data_len - 136 + 3) >> 2;           
tar = (unsigned __int8 *)(datac + 136);     
for ( i = 0; i < per; ++i )                 
{
  if ( i & 1 )                              
  {
    tmp = tar[i];
    tar[i] = *(&tar[i] + per);
    *(&tar[i] + per) = tmp;
  }
}
for ( ia = 0; ia < (signed int)(data_len - 136 + -3 * per); ++ia )
{
  if ( !(ia & 1) )
  {
    v10 = *(&tar[2 * per] + ia);
    *(&tar[2 * per] + ia) = *(&tar[3 * per] + ia);
    *(&tar[3 * per] + ia) = v10;
  }
}
..................

不会 C语言。只能看懂PER那一行。。。 (数据长度-136) /2 +1...
麻烦翻译成Pascal 语言.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
恐怕per那行都错了吧
2015-9-23 14:48
0
雪    币: 69
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这应该是一段加密或者解密的算法,
根据data_len的值计算出加密数据的范围,
第一个循环在奇数情况交换数组2个元素的数据,
第二个循环在偶数情况交换数据2个元素的数据。
总体来说就是把一个数组中元素根据一定的方法进行交换,目的是加密或者解密。


#define __int8 char
typedef unsigned int guint32;

void func(char *datac, guint32 data_len)
{
int i;
int per;
char tmp;
unsigned __int8 *tar;
signed int per2;

per = (data_len - 136 + 3) >> 2;// div 4
tar = (unsigned __int8 *)(datac + 136); //&datac[136]
for ( i = 0; i < per; ++i )
{
if ( i & 1 ) //condition : odd number
{/* exchang data in tar and tar[i+per] */
tmp = tar;
tar = *(&tar + per); // = tar[i+per]
*(&tar + per) = tmp;
}
}

per2 = (signed int)(data_len - 136 - 3 * per);
for ( i = 0; i < per2; ++i )
{
if ( !(i & 1) )//condition : even number
{/* exchang data in tar[2 * per + i] and tar[3 * per + i] */
tmp = *(&tar[2 * per] + i);
*(&tar[2 * per] + i) = *(&tar[3 * per] + i);
*(&tar[3 * per] + i) = tmp;
}
}
}
2015-9-23 16:54
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
会DELPHI,可以随时帮你搞定
2015-10-4 12:56
0
游客
登录 | 注册 方可回帖
返回
//