NationalSecurityAgency / ghidra

Ghidra is a software reverse engineering (SRE) framework
https://www.nsa.gov/ghidra
Apache License 2.0
50.68k stars 5.78k forks source link

Ghidra disassembler written in pure Golang. Allow running on Linux bare metal without a VM. #371

Closed Sasson22 closed 5 years ago

Sasson22 commented 5 years ago

GoLang source code is requested to harness Ghidras powerful RCE framework to scale for concurrency applications and multi threading. Ghidra's future adaptation in RCE should address eminent issues for a robust life cycle.

Specifically, concurrence and mutli threading is rapidly emerging and not currently served by the SAXParser, recently adapted after 9.0.

SAXParser class is not thread-safe. Therefore, multiple threads must not use the same SAXParser instance at the same time. ... Each thread has one SAXParser instance. NodeJS is single threaded. Go is multi threaded. Java and JVM have inherent security vulnerabilities and fail to scale.

Golang is thread safe, memory safe and writes to machine code on Linux without a VM. Golang is requested to further address efficiency and robust downstream adaptation, and provide secure remote debugging in a multi threaded reality.

-Golang is faster than Node. Further this request facilitates in analyzing and integrating propriety code, IoT server-client relations and data analytics.

-Specific, initial feature request should run a Linux Kernel x86_64 (since Raspberry Pi can currently run this). This further allows for conversion into debian packages, consequently followed by Ubuntu, etc. for greater distribution and crowd sourcing development.

Harnessing this valuable public offering is strengthened.

saruman9 commented 5 years ago

Please explain why not Rust or Ada or C++17/20?

vmcall commented 5 years ago

lol no generics

Sasson22 commented 5 years ago

Please explain why not Rust or Ada or C++17/20?

Good inquiry, rather succinctly:

Public adaptation is factored against technical correctness. Getting Ghidra and its extremely impressive offering into greater user adaptation is considered. The framework and it's toolkit is revolutionary. Adaptation in a highly critical open source world is a matter of downstream crowd development adaptation. Already developed by crowd sourcing to run in Docker.

Requesting Golang features written in Golang as an enhancement is selected over other options at this stage of development due to Golang and how it continues to enable more efficient communication between programmers. Golang has a robust “done right” approach championed worldwide, adding to Ghidras valuable public offering usage growth. User request features in the Golang world are built at an impressive pace including Generics or parametric polymorphism features being promised already and coming in with Go2.

Rust is not considered an optimal server side option. Perhaps a reason for it's public open source development disinterest is due to strict compile-time data ownership mechanisms that make smooth adaptation more complex and less likely. Still the exacting memory management is impressive. Future reconsideration with proper metrics and new information is keeping Rust relevant. As are further developments such as Haskell 2020 and as time goes by such lazy evaluations and memory precision will continue to hold a purists dream.

Ada had its day and finding competent developers to maintain this is something of an art. Again, the focus of reaching the people with the full scale abilities of Ghidra is better served with further developments in Golang.

C++ 17/21 ruled out, as production debug builds are not seen as optimal relevant to security compliance.

In summary, Goland and soon to be release GO2 (with Generics) is seen as optimal development features for Ghidra to scale and achieve greater use in functional, supported open source worlds to realize the full affect of this amazing framework and all of its toolkit for public use. The potential to offer a major contending language greater native possibilities, performance issues of debugging optimized binaries, secure remote debugging while remaining memory safe, multi thread safe, scalable with concurrency is requested for consideration.

Sasson22 commented 5 years ago

lol no generics

Go2 promising generics...

JustasMasiulis commented 5 years ago

Really not sure if intentional troll or one of those delusional rewrite x in y shills.

Rust is impressive, while not considered an optimal server side option

Considered by whom?

and ranks lower in many public surveys and usage charts.

Ranks lower by what measure. Show the numbers.

In what appears to be public open source development disinterest.

I don't see any disinterest of open source development in rust. Plenty of projects and libraries exist.

In summary, Goland and soon to be release GO2 (with Generics) is seen as optimal for Ghidra to scale and achieve greater acceptance and use in functional, supported and actually used by the public, open source world.

Seen as optimal by whom?

You also forgot to reconsider modern c++ in the current reality of your post.

Sasson22 commented 5 years ago

**Value adding comments appreciated.

Clarity of purpose. Value recognition of Ghidra framework and toolkit for greater public recognition. If you have a value adding perspective share it. Your opinion is appreciated and functionally considered without hierarchies obfuscating designs, suggestions or requests. If you feel entitled to an authority position perhaps you deserve it. Can you keep the discourse and free flow of sharing functional?

This issue is about building in enhancement. Ghidra is perhaps the greatest open source public offering of our lifetime, imo. It is growing quickly, despite the XXE issue in XML parsing in initial release. And it continues to expand, by example, today it is operational on Docker. Further, keeping the ball rolling...

Being in the public domain with source code freely available and viable to broad spectrum crowd-sourcing. Further, this smart move is bringing more people up to speed on this powerful framework and the impressive tool-kits! The younger generation is interested imo towards results that are functional, able to build career credits, and document contributions that are initially given freely.

Fostering such a culture here to allow greater cooperation among interested individuals, further adds value to the project imo.

And in that vein continuing accordingly...**

Rust is impressive, while not considered an optimal server side option

Considered by whom?

imo...look at the stacks built for such purposes if you like.

and ranks lower in many public surveys and usage charts.

Ranks lower by what measure. Show the numbers.

Here's a link for you...https://stackshare.io/stackups/go-vs-haskell-vs-rust

In what appears to be public open source development disinterest.

I don't see any disinterest of open source development in rust. Plenty of projects and libraries exist.

Thank you for your opinion. Velocity metrics may help here. Again imo. Granted, no disrespect to Rust. Rust is impressive and appears to be daunting for many. And by all means, please integrate your value adding enhancements at will. I still feel there is a general sense of intimidation out there in relation to Rust. Immediate results are not as rewarding and technical hang ups abound imo. Hence the interest factor is not seen as interesting.

In summary, Goland and soon to be release GO2 (with Generics) is seen as optimal for Ghidra to scale and achieve greater acceptance and use in functional, supported and actually used by the public, open source world.

Seen as optimal by whom?

Public use and experimental development by a larger cross section of people capable of adding value. As noted for example: user requests -are listened to -in Go developments. Generics are being integrated in ways that are simple to implement and be as functional as possible. Have you seen such traits in Rust or Haskell? I respect both greatly and am a fan. Perhaps you can enlighten me?

You also forgot to reconsider modern c++ in the current reality of your post.

Ah... You are fast. I edited this into my response very shortly after first hitting the comment button.. You miss this..."C++ 17/21 ruled out, as production debug builds are not seen as optimal relevant to security compliance." And if you are so quick to respond, I would definitely want you on my team! Albeit I probably can afford you! Cheers.

vmcall commented 5 years ago

have you considered rewriting the linux kernel in go and directly implementing ghidra, to scale for concurrency applications and multi threading? can we add this to the suggestion list? this would make ghidra super fast, no generics and no context switches!!

brunocassol commented 5 years ago

Really not sure if intentional troll

Regardless, it's going to be full of trolls now as someone submitted this to a troll Reddit sub: https://old.reddit.com/r/programmingcirclejerk/comments/bamxxd/ghidra_disassembler_written_in_pure_golang_allow/

I'd suggest restricting this conversation to NSA members and Issue author only.

vmcall commented 5 years ago

restriction of debate is a breach of free speech! this is a public, open-source repository where everyone ( go-developers and mentally stable) should be allowed to criticize not only code but also the issues brought up.

brunocassol commented 5 years ago

have you considered rewriting the linux kernel in go restriction of debate is a breach of free speech

Yeah, as I said. This is going to be full of trolls now. Thanks for proving my point @vmcall

vmcall commented 5 years ago

imagine having jabba(script) repos...webscale was a mistake

jha commented 5 years ago

I don't think Golang is low level enough, this should be done in Verilog. Imagine the benefits that a super parallelized application running on an FPGA could offer over slower general-purpose processors. In fact the NSA team should begun to develop ASICs exclusively for the purpose of analysis.