androguard
z3
androguard | z3 | |
---|---|---|
1 | 33 | |
5,675 | 11,183 | |
1.4% | 1.4% | |
7.8 | 9.9 | |
4 months ago | 3 days ago | |
Python | C++ | |
Apache License 2.0 | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
androguard
-
Awesome CTF : Top Learning Resource Labs
Androguard - Reverse engineer Android applications.
z3
-
Making Explainable Minesweeper
For what it's worth, the way 14MV does hints is probably by just throwing the board into Z3 (https://github.com/Z3Prover/z3) or some other constraint solver.
- Z3 Theorem Prover
-
Accidentally writing a fast SAT solver
If you want to use Z3 with a .NET language, there is also this very useful file with examples of how to use the bindings:
https://github.com/Z3Prover/z3/blob/master/examples/dotnet/P...
The examples are in C#, but easy to adapt to other languages. I found them quite useful to write a program for symbolic execution in F# that calls Z3 to simplify conditionals, here is its interface to Z3:
https://github.com/constructum/asm-symbolic-execution/blob/m...
The bindings are perhaps a bit cumbersome, but rather easy to understand and work very well. Once you appropriately wrap what you need, you can forget about the bindings as well as avoiding SMT-LIB completely.
-
Show HN: Allocate poker chips optimally with mixed-integer nonlinear programming
Every time I play a casual cash poker game with friends, we spend the first several minutes struggling to figure out chip denominations. I built this to automate that process.
Try it out here (the submitted link goes to the GitHub repo):
https://jstrieb.github.io/poker-chipper/
It turns out that picking chip denominations optimally—such that as many chips are distributed as possible, and such that the denominations are nice—is hard (in the computational complexity sense). Upon reflection, the problem seemed to be a perfect fit for constrained optimization.
I first got a CLI prototype working with Z3 (an SMT solver with optimization capabilities https://github.com/Z3Prover/z3) in Python. Then, I cross-compiled SCIP (https://www.scipopt.org/) to web assembly, and ported my code to use SCIP instead of Z3 so it could run in the browser.
The web interface is designed to be fast and easy to use on desktop and mobile.
I would love to answer questions and discuss design choices. I'm also open to feedback and bug reports. Thanks for taking a look!
-
Ask HN: What is the current state of "logical" AI?
See https://cacm.acm.org/magazines/2023/6/273222-the-silent-revo... and also modern production rules engines like https://drools.org/
Oddly, back when “expert system shells” were cool people thought 10,000 rules were difficult to handle, now 1,000,000 might not be a problem at all. Back then the RETE algorithm was still under development and people were using linear search and not hash tables to do their lookups.
Also https://github.com/Z3Prover/z3
Note “the semantic web” is both an advance and a retreat in that OWL is a subset of first order logic which is really decidable and sorta kinda fast. It can do a lot but people aren’t really happy with what it can do.
-
Lean4 helped Terence Tao discover a small bug in his recent paper
Code correctness is a lost art. I requirement to think in abstractions is what scares a lot of devs to avoid it. The higher abstraction language (formal specs) focus on a dedicated language to describe code, whereas lower abstractions (code contracts) basically replace validation logic with a better model.
C# once had Code Contracts[1]; a simple yet powerful way to make formal specifications. The contracts was checked at compile time using the Z3 SMT solver[2]. It was unfortunately deprecated after a few years[3] and once removed from the .NET Runtime it was declared dead.
The closest thing C# now have is probably Dafny[4] while the C# dev guys still try to figure out how to implement it directly in the language[5].
[1] https://www.microsoft.com/en-us/research/project/code-contra...
[2] https://github.com/Z3Prover/z3
[3] https://github.com/microsoft/CodeContracts
[4] https://github.com/dafny-lang/dafny
[5] https://github.com/dotnet/csharplang/issues/105
-
Programming Languages Going Above and Beyond
I believe, Nim also has this functionality, although, it uses the [0]Z3Prover tool with a nim frontend [1]"DrNim" for proving.
[0]https://github.com/Z3Prover/z3
- Modern SAT solvers: fast, neat and underused (2018)
-
If You've Got Enough Money, It's All 'Lawful'
Don't get me wrong, there are times when Microsoft got it right the first time that was technically far superior to their competitors. Windows IOCP was theoretically capable of doing C10K as far back in 1994-95 when there wasn't any hardware support yet and UNIX world was bickering over how to do asynchronous I/O. Years later POSIX came up with select which was a shoddy little shit in comparison. Linux caved in finally only as recently as 2019 and implemented io_uring. Microsoft research has contributed some very interesting things to computer science like Z3 SAT solver and in collaboration with INRIA made languages like F* and Low* for formal specification and verification. But all this dwarfs in comparison to all the harm they did.
What are some alternatives?
Apktool - A tool for reverse engineering Android apk files
codechecker - CodeChecker is an analyzer tooling, defect database and viewer extension for static and dynamic analyzer tools.
hellomello - Experiments with writing Android apps in Nim
ikos - Static analyzer for C/C++ based on the theory of Abstract Interpretation.
apk2gold - CLI tool for decompiling Android apps to Java. It does resources! It does Java! Its real easy!
magmide - A dependently-typed proof language intended to make provably correct bare metal code possible for working software engineers.