|
|
Message-ID: <20171208194412.GA13251@openwall.com>
Date: Fri, 8 Dec 2017 20:44:12 +0100
From: Solar Designer <solar@...nwall.com>
To: john-users@...ts.openwall.com
Subject: Re: Compiling John as a shared object
On Tue, Nov 28, 2017 at 03:17:43PM +0100, harrim4n wrote:
> I'm trying to compile John as a shared object to use in python bindings
> for a project I'm working on. I'm using the latest version from
> https://github.com/magnumripper/JohnTheRipper/tree/bleeding-jumbo.
Great.
> However I'm running into some issues doing so, namely the x86-64.S file.
> As this file is assembly, I can't simply recompile it with -fPIC.
>
> This causes the following error when trying to create a "libjohn.so" file:
>
> /usr/bin/ld: x86-64.o: relocation R_X86_64_PC32 against symbol
> `nt_buffer8x' can not be used when making a shared object; recompile
> with -fPIC
>
> However, to me, the assembly already looks to be position independent.
Unfortunately, it is not. For PIC code, the RIP-relative addressing
should be used to access the GOT entry, through which the actual
"non-local" variables (not in the same translation unit) are accessed.
Accessing them directly via RIP-relative addressing is not enough.
> Does anyone have pointers as to how I could either modify the assembly
> to be PI
Here's the kind of changes needed:
$ cat x.c
extern int x;
int f(void) { return x; }
$ gcc -S -O2 x.c -o x1.s
$ gcc -S -O2 x.c -o x2.s -fPIC
$ diff -U0 x1.s x2.s
[...]
- movl x(%rip), %eax
+ movq x@...PCREL(%rip), %rax
+ movl (%rax), %eax
> or any other way I could create python bindings for John?
You could drop the assembly files altogether. We have equivalent (and
sometimes superior) C code for everything contained in there, except for
the runtime CPU detection. You just need to set the corresponding *_ASM
defines in arch.h (a file that's generated when you ./configure, or is
symlinked to e.g. x86-64.h) to 0 and "#undef NT_X86_64" to tell the rest
of JtR not to expect assembly code for any of the crypto.
Yet another option might be to look at and reuse some experience from
this project:
https://github.com/L0phtCrack/jtrdll
This is how JtR is integrated with LC7, so it focuses on Windows builds
and is not usable for you directly.
> I am aware that I could rebuild the python interpreter and use static
> linking, however I would like to avoid this option because of obvious
> maintainability issues. I also tried simply using a statically built lib
> in the setup.py file, but then I get
>
> ImportError: /usr/lib/python2.7/site-packages/pyJohn.so: undefined
> symbol: fmt_nsec3
I suppose you merely include samples of these errors, and you actually
got a lot more of similar errors? It's hard to debug this via a mailing
list. I guess you'd need to investigate it on your own.
Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.