Image
 
linkedin_logo.png rss_logo.jpg
twitter_logo.png youtube_logo.jpg
Latest Additions
 
EH-Net Login
Welcome Guest.






Lost Password?
No account yet? Register
Who's Online
We have 82 guests and 1 member online
 
Free Business and Tech Magazines and eBooks

You are here: Home arrow Ethical Hacking Discussions and Related Certificationsarrow Network Pen Testingarrow Difficulty of reverse engineering
EH-Net
May 19, 2013, 07:00:44 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Go back to The Ethical Hacker Network Online Magazine Home Page
 
   Home   Help Calendar Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: Difficulty of reverse engineering  (Read 7039 times)
0 Members and 1 Guest are viewing this topic.
Neophyte
Newbie
*
Offline Offline

Posts: 3


View Profile
« on: February 04, 2010, 12:41:07 PM »

I'm a "normal" programmer (oxymoron, I know).  I have no experience with hacking, but I need to get some information from some knowledgeable people on this subject.

I have a somewhat complex mathematical algorithm consisting of about 1000 lines of C++ code. If I compile and optimize it, how difficult will it be for someone else to reverse engineer it and discover how the algorithm works? Will it take a few days, or a few months, or a few years?

Any feedback will be greatly appreciated.

-k
Logged
UNIX
Hero Member
*****
Offline Offline

Posts: 1234


View Profile
« Reply #1 on: February 04, 2010, 12:53:31 PM »

Can you give more information? A sample program would be great too, so that interested people (such as myself Cheesy) could take a look at it.
Without more information I would say a few hours - a few days.
Logged
n0on3
Newbie
*
Offline Offline

Posts: 11



View Profile WWW
« Reply #2 on: February 04, 2010, 12:57:08 PM »

Are you concerned about someone to understand how your algorithm works, or to get the actual (equivalent) code you wrote ?
From a technical point of view, you shall imagine someone with a debugger, that execute your program step-by-step and see the low level instructions as well as the changes to the data structures. The complexity of guessing how the algorithm works depends on your algorithm in this case.

Anyway I think you are more concerned about someone to use some automated process to de-compile your software and get your code or something equivalent. In that case you can consider to use some code-obfuscation technique.
Logged

UNIX
Hero Member
*****
Offline Offline

Posts: 1234


View Profile
« Reply #3 on: February 04, 2010, 12:59:50 PM »

Security through obscurity? Are you sure?
Logged
n0on3
Newbie
*
Offline Offline

Posts: 11



View Profile WWW
« Reply #4 on: February 04, 2010, 01:23:32 PM »

Security through obscurity? Are you sure?
I'm not saying it's a solution, i'm saying it may help.
Even if it's true that you don't deny the activity, you may have the goal to raise its complexity to the point that it doesn't worth the effort.

Anyway, if that software has to do its job on untrusted standalone machines, i don't see much more you can do about that... any ?
Logged

Neophyte
Newbie
*
Offline Offline

Posts: 3


View Profile
« Reply #5 on: February 04, 2010, 01:42:53 PM »

A Delaunay triangulation routine would be similar to what I'm doing.  Here's some code for that (~270 lines of code):

http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/triangulate.c

I'm concerned with someone gaining enough understanding of how the algorithm works that they could replicate it themselves.  Honestly, if I had the original C++ code for 1000 lines of something like the triangulation code, it would take me a couple of days to figure out the nuts and bolts of what all was going on.  If I had to look at the assembly code, though, game over!  However, there are a lot smarter people than me out there, and I know decompilers can get you farther than simple assembly code.

So , for a similar 1000-line piece of code, what's a good estimate for the time it would take to figure out the compiled algorithm?
Logged
Neophyte
Newbie
*
Offline Offline

Posts: 3


View Profile
« Reply #6 on: February 04, 2010, 01:59:31 PM »

n0on3 - you mentioned obfuscation.  My understanding of obfuscation was that it was primarily helpful for interpreted code (Java, VB, etc.), since it mangled function and variable names.  Code that's been compiled to binary machine code should not have any meaningful names left, right?  It's all just push/pop/move/etc. statements, right?  Can an obfuscator still help?

Along those lines, can you recommend any good software protection programs?  I've tried VMProtect, but whatever it does to my program makes it look like a virus afterwards to some of the major AV packages.



Logged
n0on3
Newbie
*
Offline Offline

Posts: 11



View Profile WWW
« Reply #7 on: February 04, 2010, 02:48:43 PM »

I'm sorry, i can't recommend any software, i just read about these techniques in the past but never had the need to use them.
Anyway, compiled code is as you said all about instructions, and what you don't want is someone to look at them, or inspect with some tool, and guess what your algorithm is like. What i thought was that maybe you can still trade something, like changing your implementation that probably match common programming best practices, inserting real instructions that makes your routines harder to understand or don't match what automated tools recognize, whitout changing their results. Obviously this is algorithmically useless, pure computational overhead and decrease performance, and since you were talking of optimized code you won't like this, but maybe you can find an acceptable tradeoff, if deny reverse engineering is really important for some reason.
Logged

geekyone
Full Member
***
Offline Offline

Posts: 180



View Profile
« Reply #8 on: February 04, 2010, 03:38:42 PM »

First off I have to caveat this advice with the statement that I am a Reverse Engineering newbie.  I would say based on what you want accomplished "keeping someone from replacing the algorithm" and the complexity of the code in question that successful reverse engineering would depend mostly on your implementation.  Is this algorithm code going to be part of the main program executable or a separate file?  If it is included in the main exe and fully integrated into your program honestly very few people are ever going to be able to replace that algorithm by reverse engineering.  I am sure some experts would be able to but it would require significantly altering the flow of the executable using assembly code.  Now on the other hand if you put the algorithm in a separate file using a debugger it would be fairly easy to trace the program flow and change algorithms.  Of course it makes it a lot harder for you to ever upgrade your algorithm if you integrate it into your main executable.

Well that's my two cents.  Good Luck!
Logged

CISSP, CEH, GPEN, GCIH, GCFA
phn1x
Newbie
*
Offline Offline

Posts: 26


View Profile
« Reply #9 on: February 05, 2010, 09:30:35 PM »

If someone really wants to RE it and implement it for themselves they will...regardless of what you do to it.
Logged
UNIX
Hero Member
*****
Offline Offline

Posts: 1234


View Profile
« Reply #10 on: February 07, 2010, 03:56:44 AM »

@Neophyte: I think the sample you posted can be reversed within a few hours - a few days, as assumed before. There were much stronger protections already reversed, so this shouldn't be too hard, though it really depends on the knowledge and experience of the reverser.
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines
Joomla Bridge by JoomlaHacks.com
Valid XHTML 1.0! Valid CSS!
Page created in 0.078 seconds with 23 queries.
 
Exclusive Deal

sansfire13_245x90_cw90.jpg
SANSFIRE 2013
June 15 - 22

5% Off w/ Code: EHN_5

SANS Deals 4 EH-Netters
5% OFF Any SANS Course in Any Format!
Coupon Code: EHN_5 Including SANS Rocky Mountain 2013 & SANS Boston 2013
Polls
Compared to this year, 2013 will be:
 
Recent Forum Topics
EH-Net News Feeds
Latest Additions
 
         
Free Business and Tech Magazines and eBooks

© 2013 The Ethical Hacker Network
Joomla! is Free Software released under the GNU/GPL License.