Skip to content

Instantly share code, notes, and snippets.

@ephesus
Created August 3, 2011 09:35
Show Gist options
  • Save ephesus/1122257 to your computer and use it in GitHub Desktop.
Save ephesus/1122257 to your computer and use it in GitHub Desktop.
proxychains os x patch
This patch is originally from http://chrootlabs.org/
updated to use homebrew's library path instead of creating directories
in $HOME
diff -rupN proxychains-3.1/proxychains/Makefile.in proxychains-3.1.patched/proxychains/Makefile.in
--- proxychains-3.1/proxychains/Makefile.in 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/Makefile.in 2011-08-03 18:57:08.000000000 +0900
@@ -121,7 +121,7 @@ LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libproxychains_la_DEPENDENCIES =
libproxychains_la_OBJECTS = libproxychains.lo core.lo
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ -arch x86_64 -arch i386
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
diff -rupN proxychains-3.1/proxychains/core.c proxychains-3.1.patched/proxychains/core.c
--- proxychains-3.1/proxychains/core.c 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/core.c 2011-08-03 18:57:08.000000000 +0900
@@ -35,12 +35,18 @@
#include <fcntl.h>
#include <time.h>
#include <stdarg.h>
+#include <dlfcn.h>
#include "core.h"
extern int tcp_read_time_out;
extern int tcp_connect_time_out;
extern int proxychains_quiet_mode;
-
+extern connect_t true_connect;
+extern getaddrinfo_t true_getaddrinfo;
+extern freeaddrinfo_t true_freeaddrinfo;
+extern getnameinfo_t true_getnameinfo;
+extern gethostbyaddr_t true_gethostbyaddr;
+
static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static void encode_base_64(char* src,char* dest,int max_len)
@@ -159,13 +165,14 @@ static int timed_connect(int sock, const
pfd[0].fd=sock;
pfd[0].events=POLLOUT;
- fcntl(sock, F_SETFL, O_NONBLOCK);
+ fcntl(sock, F_SETFL, O_NONBLOCK);
ret=true_connect(sock, addr, len);
-// printf("\nconnect ret=%d\n",ret);fflush(stdout);
+// printf("\nconnect ret=%d\n",ret); fflush(stdout);
+
if(ret==-1 && errno==EINPROGRESS)
{
ret=poll(pfd,1,tcp_connect_time_out);
-// printf("\npoll ret=%d\n",ret);fflush(stdout);
+// printf("\npoll ret=%d\n",ret);fflush(stdout);
if(ret==1)
{
value_len=sizeof(int);
@@ -388,14 +395,18 @@ static int start_chain(int *fd, proxy_da
inet_ntoa(*(struct in_addr*)&pd->ip),
htons(pd->port));
pd->ps=PLAY_STATE;
+
bzero(&addr,sizeof(addr));
+
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = pd->ip;
addr.sin_port = pd->port;
+
if (timed_connect (*fd ,(struct sockaddr*)&addr,sizeof(addr))) {
pd->ps=DOWN_STATE;
goto error1;
}
+
pd->ps=BUSY_STATE;
return SUCCESS;
error1:
diff -rupN proxychains-3.1/proxychains/core.h proxychains-3.1.patched/proxychains/core.h
--- proxychains-3.1/proxychains/core.h 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/core.h 2011-08-03 18:57:08.000000000 +0900
@@ -66,29 +66,28 @@ int connect_proxy_chain (
int proxychains_write_log(char *str,...);
struct hostent* proxy_gethostbyname(const char *name);
+typedef struct hostent* (*gethostbyname_t)(const char *);
+static gethostbyname_t true_gethostbyname;
typedef int (*connect_t)(int, const struct sockaddr *, socklen_t);
-connect_t true_connect;
-
-typedef struct hostent* (*gethostbyname_t)(const char *);
-gethostbyname_t true_gethostbyname;
+// connect_t true_connect;
typedef int (*getaddrinfo_t)(const char *, const char *,
const struct addrinfo *,
struct addrinfo **);
-getaddrinfo_t true_getaddrinfo;
+// getaddrinfo_t true_getaddrinfo;
typedef int (*freeaddrinfo_t)(struct addrinfo *);
-freeaddrinfo_t true_freeaddrinfo;
+// freeaddrinfo_t true_freeaddrinfo;
typedef int (*getnameinfo_t) (const struct sockaddr *,
socklen_t, char *,
socklen_t, char *,
socklen_t, unsigned int);
-getnameinfo_t true_getnameinfo;
+// getnameinfo_t true_getnameinfo;
typedef struct hostent *(*gethostbyaddr_t) (const void *, socklen_t, int);
-gethostbyaddr_t true_gethostbyaddr;
+// gethostbyaddr_t true_gethostbyaddr;
int proxy_getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
diff -rupN proxychains-3.1/proxychains/libproxychains.c proxychains-3.1.patched/proxychains/libproxychains.c
--- proxychains-3.1/proxychains/libproxychains.c 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/libproxychains.c 2011-08-03 18:57:08.000000000 +0900
@@ -32,7 +32,6 @@
#include <sys/fcntl.h>
#include <dlfcn.h>
-
#include "core.h"
#define satosin(x) ((struct sockaddr_in *) &(x))
@@ -57,6 +56,13 @@ static inline void get_chain_data(
unsigned int *proxy_count,
chain_type *ct);
+connect_t true_connect;
+getaddrinfo_t true_getaddrinfo;
+freeaddrinfo_t true_freeaddrinfo;
+getnameinfo_t true_getnameinfo;
+gethostbyaddr_t true_gethostbyaddr;
+
+
static void init_lib()
{
// proxychains_write_log("ProxyChains-"VERSION
@@ -291,7 +297,7 @@ void freeaddrinfo(struct addrinfo *res)
int getnameinfo (const struct sockaddr * sa,
socklen_t salen, char * host,
socklen_t hostlen, char * serv,
- socklen_t servlen, unsigned int flags)
+ socklen_t servlen, int flags)
{
int ret = 0;
if(!init_l)
diff -rupN proxychains-3.1/proxychains/proxychains proxychains-3.1.patched/proxychains/proxychains
--- proxychains-3.1/proxychains/proxychains 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/proxychains 2011-08-03 18:57:08.000000000 +0900
@@ -1,9 +1,11 @@
#!/bin/sh
echo "ProxyChains-3.1 (http://proxychains.sf.net)"
+echo "Mod for OSX - using dylib"
if [ $# = 0 ] ; then
echo " usage:"
echo " proxychains <prog> [args]"
exit
fi
-export LD_PRELOAD=libproxychains.so
+export DYLD_FORCE_FLAT_NAMESPACE=
+export DYLD_INSERT_LIBRARIES=$(brew --prefix proxychains)/lib/libproxychains.3.0.0.dylib
exec "$@"
diff -rupN proxychains-3.1/proxychains/proxychains.conf proxychains-3.1.patched/proxychains/proxychains.conf
--- proxychains-3.1/proxychains/proxychains.conf 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/proxychains.conf 2011-08-03 18:59:58.000000000 +0900
@@ -1,7 +1,7 @@
# proxychains.conf VER 3.1
#
# HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
-#
+#
# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
@@ -51,8 +51,8 @@ tcp_connect_time_out 8000
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
-# http 192.168.39.93 8080
-#
+# http 192.168.39.93 8080
+#
#
# proxy types: http, socks4, socks5
# ( auth types supported: "basic"-http "user/pass"-socks )
diff -rupN proxychains-3.1/proxychains/proxyresolv proxychains-3.1.patched/proxychains/proxyresolv
--- proxychains-3.1/proxychains/proxyresolv 2006-03-16 01:16:59.000000000 +0900
+++ proxychains-3.1.patched/proxychains/proxyresolv 2011-08-03 18:57:08.000000000 +0900
@@ -11,6 +11,6 @@ if [ $# = 0 ] ; then
exit
fi
-
-export LD_PRELOAD=libproxychains.so
-dig $1 @$DNS_SERVER +tcp | awk '/A.+[0-9]+\.[0-9]+\.[0-9]/{print $5;}'
+export DYLD_FORCE_FLAT_NAMESPACE=
+export DYLD_INSERT_LIBRARIES=$(brew --prefix proxychains)/lib/libproxychains.3.0.0.dylib
+dig $1 @$DNS_SERVER +tcp | awk '/^[^;].+A.+[0-9]+\.[0-9]+\.[0-9]/{print $5;}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment