[llvm-dev] LLVM IR from static/dynamic libraries

John Criswell via llvm-dev
Fri, 09 Oct 2015 13:09:45 -0000

On 10/8/15 11:20 PM, Vedant Kumar via llvm-dev wrote:
> Hi,
>
> Could you explain why you're trying to obfuscate libraries?
>
> At any rate if you're looking for a way to convert machine code into
llvm IR, then I don't think there's a well-supported way of doing that.

There are at least two tools for converting machine code to LLVM IR.

One is RevGen (http://dslab.epfl.ch/pubs/revgen.pdf).

The other is BAP (http://users.ece.cmu.edu/~ejschwar/papers/cav11.pdf).

Both are open source though I'm not sure where to find them.  A Google
search should fix that.

Please be aware that the LLVM IR generated by these tools is not quite
like the LLVM IR generated by Clang when compiling from source to LLVM
IR.  RevGen (and probably BAP) create code that emulates the processor
on which the binary runs and then uses LLVM optimizations to try to
clean up the result.  If you take the result and translate it back to
machine code, it may not run very efficiently (if it runs at all; these
tools are primarily designed to analyze binary code by reusing existing
infrastructure in LLVM).

If you want to obfuscate existing binary code, there may be better
methods.  For example, if I were to do it, I would use LLVM's MC layer
to disassemble the code, maybe raise the code to the LLVM MachineInstr
level, and then do analysis/obfuscation at that level. Raising all the
way up to LLVM IR probably won't add much.

Regards,

John Criswell


>
> vedant
>
>> On Oct 6, 2015, at 10:53 PM, Sandeep Kumar Singh via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
>>
>> Hi All,
>>
>> Is this possible to generate LLVM IR from any static/dynamic link
library?
>> I have some static and dynamic link library and I want to generate LLVM
IR as I want to obfuscate these libraries.
>> Is there any way to do the same.
>>
>> Please give me some pointers on this.
>>
>> Thanks,
>> Deep
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester