zardus / idalink

Some glue facilitating remote use of IDA (the Interactive DisAssembler) Python API.
BSD 2-Clause "Simplified" License
77 stars 18 forks source link

A py3k question has appeared #20

Open AndyXan opened 5 years ago

AndyXan commented 5 years ago

Hello @zardus,

do you have any idea on how to enable idalink, or more specific rpyc to talk to ida again after angr hits py3k? We're having a complete self developed idarpc service with which we generated thousands of CFG's through rpyc, transform them to angrs understanding of basic blocks and use sym exec on them. With the upcoming changes, I think that's it - using IDA as a backend for angr won't be possible anymore.

By any chance, any thoughts on that? Personally, I don't see IDAPythong going to py3k anytime soon. Angr backwards supporting py2k is also out of question and rpyc being able to bridge py2k and py3k has been tried and burried deeply underground.

zardus commented 5 years ago

Hmm... That's a good point, and we haven't really planned anything in regards to IDA integration.

I think the best process would be to convert idalink from using rpyc to just sending pickles or json over a socket, which essentially means a slightly simplified, homespun rpyc. It's ugly, but I'm not sure what else can be done...

In terms of actually doing this, there's no way we have the manpower to maintain the angr-ida link, as we haven't used it in years. If this is something that you are interested in doing, I'd be glad to offer guidance, though!

AndyXan commented 5 years ago

Nah, wasn't meant to be. We have our own version of idalink, completely different code-base, just with the same basic idea of rpyc, screen and ida.

Asked the IDA-Support today, and they basically meant that they plan to switch to py3k eventually. In the mean time, I agree with you - even some http-based json rpc would do, just have to take care of the serialization via pickle or whatever yourself, which is sad but can't be helped.

/Update

Regarding pickle - I'm not entirely sure, but as I understood: Pickle also serializes on a objects level. Guess there's also a problem as the object model changed.

zardus commented 5 years ago

Depending on what's being pickled, the pickles can be loaded across python versions, so it could work. It's not gonna be pretty, though.