lcx源代码以及免杀的研究

之前和Random大神讨论了一下免杀的问题,他给出了一个比较不错的想法,使用debug版本发布可以过很多杀软。顺便看了下lcx的源码,发现其代码不算特别复杂,于是乎就在这分析一下。

报毒情况

因为使用的源代码编译,报毒不算很多,因为lcx使用的都是socket运行时不会被杀掉。基本上不报毒就是可以用了

使用debug方式发布的报毒


使用release方式发布的报毒情况,的确是多了那么几个但是没有想象中多的那么多



源代码

大体看了一下,其实就是很简单的运用了socket,三个核心函数bind2bind() conn2bind() conn2conn() 最后都是生成两个socket,之后放到transmitdata()里面传递数据
之前不大理解一个端口绑定两个socket,在代码里发现setsockopt()可以设置,因为每一个连接都由本地地址和远端地址的组合唯一确定,所以只要远端地址不同,两个套接口与一个地址捆绑并无大碍。为了通知WINDOWS套接口实现不要因为一个地址已被一个套接口使用就不让它与另一个套接口捆绑,应用程序可在bind()调用前先设置SO_REUSEADDR选项。
/*
************************************************************************************
* 
* HTran.cpp - HUC Packet Transmit Tool.
*
* Copyright (C) 2000-2004 HUC All Rights Reserved.
*
* Author : lion
* : lion#cnhonker.net
* : <a href="http://www.cnhonker.com" target="_blank">http://www.cnhonker.com</a>
* :
* Notice : Thx to bkbll (bkbll#cnhonker.net)
* :
* Date : 2003-10-20
* :
* Complie : cl HTran.cpp
* :
* Usage : E:\>HTran
* : ======================== HUC Packet Transmit Tool V1.00 =======================
* : =========== Code by lion & bkbll, Welcome to <a href="http://www.cnhonker.com" target="_blank">http://www.cnhonker.com</a> ==========
* :
* : [Usage of Packet Transmit:]
* : HTran - [-log logfile]
* :
* : [option:]
* : -listen 
* : -tran 
* : -slave 
*
************************************************************************************
*/
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <signal.h>
#include <errno.h>
#include <io.h> 
#pragma comment(lib, "ws2_32.lib")
 
#define VERSION "1.00"
#define TIMEOUT 300
#define MAXSIZE 20480
#define HOSTLEN 40
#define CONNECTNUM 5
 
// define 2 socket struct
struct transocket 
{
	SOCKET fd1;
	SOCKET fd2;
};
 
// define function 
void ver();
void usage(char *prog);
void transmitdata(LPVOID data);
void getctrlc(int j);
void closeallfd();
void makelog(char *buffer, int length);
void proxy(int port);
void bind2bind(int port1, int port2);
void bind2conn(int port1, char *host, int port2);
void conn2conn(char *host1, int port1, char *host2, int port2);
int testifisvalue(char *str);
int create_socket();
int create_server(int sockfd, int port);
int client_connect(int sockfd, char* server, int port);
 
// define GLOBAL variable here
extern int errno;
FILE *fp;
int method=0;
//int connectnum=0;
 
//************************************************************************************
// 
// function main 主要是处理用户参数输入的问题
//
//************************************************************************************
VOID main(int argc, char* argv[])
{
	char **p;
	char sConnectHost[HOSTLEN], sTransmitHost[HOSTLEN];
	int iConnectPort=0, iTransmitPort=0;
	char *logfile=NULL;
	 
	ver();
	memset(sConnectHost, 0, HOSTLEN);
	memset(sTransmitHost, 0, HOSTLEN);
	 
	p=argv;
	while(*p)
	{
		if(stricmp(*p, "-log") == 0)
		{
			if(testifisvalue(*(p+1)))
			{
				logfile = *(++p);
			} 
			else
			{
				printf("[-] ERROR: Must supply logfile name.\r\n");
				return;
			}
			p++;
			continue;
		}
		p++;
	}
	 
	if(logfile !=NULL)
	{
		fp=fopen(logfile,"a");
		if(fp == NULL ) 
		{
			printf("[-] ERROR: open logfile");
			return;
		}
	 
		makelog("====== Start ======\r\n", 22);
	}
	 
	 
	// Win Start Winsock.
	WSADATA wsadata;
	WSAStartup(MAKEWORD(1, 1), &wsadata);
	 
	signal(SIGINT, &getctrlc);
	 
	if(argc > 2)
	{
		if(stricmp(argv[1], "-listen") == 0 && argc >= 4)
		{
			iConnectPort = atoi(argv[2]);
			iTransmitPort = atoi(argv[3]);
			method = 1;
		}
		else
		if(stricmp(argv[1], "-tran") == 0 && argc >= 5)
		{
			iConnectPort = atoi(argv[2]);
			strncpy(sTransmitHost, argv[3], HOSTLEN);
			iTransmitPort = atoi(argv[4]);
			method = 2;
		}
		else
		if(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值