SlideShare a Scribd company logo
Reverse Engineer Web Applications
How to
First things first
Prerequisites
• node.js ( web tools are made with node first )
• npm ( comes with node )
Nice-to-haves
• Visual Studio code ( or suitable code editor )
• git ( because it's be?er than cvs )
First things first
Lab repository
h5ps://github.com/jsoverson/workshop-reverse-engineering
-or-
Zipfile: h5p://bit.ly/reveng-webapps
Reverse Engineer Web Applications
How to

Recommended for you

Monitoring Kafka w/ Prometheus
Monitoring Kafka w/ PrometheusMonitoring Kafka w/ Prometheus
Monitoring Kafka w/ Prometheus

This document discusses monitoring Apache Kafka clusters and applications with Prometheus. It provides an overview of the architecture used, including deploying Prometheus servers, Kafka and HBase exporters, and a JSON exporter for YARN applications. Specific exporters are discussed for Kafka brokers using JMX, Kafka clients using the Prometheus Java library, and exposing application metrics via HTTP. Important Prometheus configurations and query functions are also covered. The summary highlights the key components of the monitoring architecture and some of the exporters and techniques discussed.

prometheus
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask

A quick intro to using the Python micro framework Flask. Building a simple multiple page website from the ground up.

programmingpythonchattanooga
Flask – Python
Flask – PythonFlask – Python
Flask – Python

This document provides an overview of Flask, a microframework for Python. It discusses that Flask is easy to code and configure, extensible via extensions, and uses Jinja2 templating and SQLAlchemy ORM. It then provides a step-by-step guide to setting up a Flask application, including creating a virtualenv, basic routing, models, forms, templates, and views. Configuration and running the application are also covered at a high level.

flaskwsgisqlalchemy
Challenge #1
1. Web applica,ons have grown extremely complex.
https://github.com/jsoverson/workshop-reverse-engineering
Web 101
https://github.com/jsoverson/workshop-reverse-engineering
Web 101
GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Chrome/72.0.3626.96 Safari/537.36 (…)
HTTP/1.1 200 OK
Date: Tue, 19 Feb 2019 21:34:08 GMT
Content-Type: text/html
Content-Length: 1932
<!doctype HTML>(…)
https://github.com/jsoverson/workshop-reverse-engineering
Web 101
https://github.com/jsoverson/workshop-reverse-engineering

Recommended for you

Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite

This document provides an outline for a presentation on pentesting web applications with Burp Suite. It discusses using Burp Suite to scope a target, map content through spidering and directory bruteforcing, replace automated scanning with manual fuzzing using attack paylists, and test authentication through bruteforcing logins. Specific techniques covered include using the Burp spider, intruder, and engagement tools to discover content and hidden directories, importing wordlists to bruteforce hidden paths, and configuring intruder payloads and grep rules to analyze results from fuzzing and authentication testing.

Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency

https://2018.zeronights.ru/en/reports/reverse-proxies-inconsistency/ Modern websites are growing more complex with different reverse proxies and balancers covering them. They are used for various purposes: request routing, caching, putting additional headers, restricting access. In other words, reverse proxies must both parse incoming requests and modify them in a particular way. However, path parsing may turn out to be quite a challenge due to mismatches in the parsing of different web servers. Moreover, request converting may imply a wide range of different consequences from a cybersecurity point of view. I have analyzed different reverse proxies with different configurations, the ways they parse requests, apply rules, and perform caching. In this talk, I will both speak about general processes and the intricacies of proxy operation and demonstrate the examples of bypassing restrictions, expanding access to a web application, and new attacks through the web cache deception and cache poisoning.

reverse proxynginxzeronights
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016

This is a bug bounty hunter presentation given at Nullcon 2016 by Bugcrowd's Faraz Khan. Learn more about Bugcrowd here: https://bugcrowd.com/join-the-crowd

bug bountieswhite hat hackerinformation security
Challenge #2
1. Web applica,ons have grown extremely complex.
2. Limited ability to run old versions of resources or use old APIs.
https://github.com/jsoverson/workshop-reverse-engineering
99% of websites assume connecHvity
https://github.com/jsoverson/workshop-reverse-engineering
Challenge #3
1. Web applica,ons have grown extremely complex.
2. Limited ability to run old versions of resources or use old APIs.
3. Web site resources can change frequently.
https://github.com/jsoverson/workshop-reverse-engineering
https://github.com/jsoverson/workshop-reverse-engineering

Recommended for you

Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js

Basics of Node.js and where it is being used currently. Some introductory examples are also included in the presentation to get started.

node.jsserver side javascriptv8
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics

Docker has created enormous buzz in the last few years. Docker is a open-source software containerization platform. It provides an ability to package software into standardised units on Docker for software development. In this hands-on introductory session, I introduce the concept of containers, provide an overview of Docker, and take the participants through the steps for installing Docker. The main session involves using Docker CLI (Command Line Interface) - all the concepts such as images, managing containers, and getting useful work done is illustrated step-by-step by running commands.

operating systemsdockercontainerization
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP

This document provides an introduction to PHP, including: - What scripting languages and PHP are, and how PHP works as a server-side scripting language - The history and origins of PHP - How to set up a PHP development environment using XAMPP - PHP programming fundamentals like syntax, operators, and control structures - How to handle forms and files in PHP - How to connect to and manipulate databases like MySQL from PHP - Several tasks as examples of working with forms, files, and databases in PHP

phpweb developmentserver side scripting
https://github.com/jsoverson/workshop-reverse-engineering
Challenge #4
1. Web applica,ons have grown extremely complex.
2. Limited ability to run old versions of resources or use old APIs.
3. Web sites and APIs can change frequently.
4. Web browsers change frequently.
https://github.com/jsoverson/workshop-reverse-engineering
A year of
Chrome
A year of
FireFox
https://github.com/jsoverson/workshop-reverse-engineering
Challenge #5
1. Web applica,ons have grown extremely complex.
2. Limited ability to run old versions of resources or use old APIs.
3. Web sites and APIs can change frequently.
4. Web browsers change frequently.
5. Actual aDackers are leading to more effec,ve countermeasures.
https://github.com/jsoverson/workshop-reverse-engineering

Recommended for you

Web application security
Web application securityWeb application security
Web application security

The document discusses web application security and provides an overview of common vulnerabilities like SQL injection, cross-site scripting (XSS), and cross-site request forgery (CSRF). It summarizes the OWASP Top 10 list of most critical web app security risks, including injection flaws, broken authentication, sensitive data exposure, and more. The document also offers best practices for developing more securely, like using prepared statements, validating and sanitizing input, and implementing authentication and session management properly.

owaspphpweb security
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programsAEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs

Presentation from LevelUp 0x03 conference - https://forum.bugcrowd.com/t/levelup-0x03-aem-hacker-approaching-adobe-experience-manager-webapps-in-bug-bounty-programs-by-0ang3el/

aemhackingbug hunting
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana

This is a talk on how you can monitor your microservices architecture using Prometheus and Grafana. This has easy to execute steps to get a local monitoring stack running on your local machine using docker.

dockergrafanalocal setup
Website a?acks are a serious problem
>3 billion a5acks in 1 week for 1 customer on 1 page
https://github.com/jsoverson/workshop-reverse-engineering
And have an industry around protecHng them
https://github.com/jsoverson/workshop-reverse-engineering
And have an industry around protecHng them
That's Me!
https://github.com/jsoverson/workshop-reverse-engineering
So how do you hack web apps?

Recommended for you

Owasp Top 10 A1: Injection
Owasp Top 10 A1: InjectionOwasp Top 10 A1: Injection
Owasp Top 10 A1: Injection

This document discusses injection vulnerabilities like SQL, XML, and command injection. It provides examples of how injection occurs by mixing commands and data, including accessing unauthorized data or escalating privileges. The speaker then discusses ways to prevent injection, such as validating all user input, using prepared statements, adopting secure coding practices, and implementing web application firewalls. The key message is that applications should never trust user input and adopt defense in depth techniques to prevent injection vulnerabilities.

xmlhackowasp
Nginx
NginxNginx
Nginx

Nginx is an open-source, lightweight web server that can serve static files, act as a reverse proxy, load balancer, and HTTP cache. It is fast, scalable, and improves performance and security for large websites. Some key companies that use Nginx include Google, IBM, LinkedIn, and Facebook. Nginx follows a master-slave architecture with an event-driven, asynchronous, and non-blocking model. The master process manages worker processes that handle requests in a single-threaded manner, improving concurrency.

nginxreverseproxy
An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST

The presentation provides an overview of what are Web Services, Why we need for Web Services; Features of SOAP & RESTful Web Services.

web servicesoapsoa
1. Drive the browser programmaHcally
2. Simulate and intercept "system" calls
3. Reuse as much applicaHon code as possible
Lab work
Lab 0 Lab 1 Lab 2
1. ExtracHng logic
2. ExtracHng logic
resiliently
3. Transforming with
scope awareness
1. AutomaHng a browser
2. IntercepHng requests
3. Modifying responses
4. RewriHng JS on the fly
with a mocked
environment
1. Understanding Intent

in JavaScript
Lab Format
lab-#.#/
├── answer
│   └── answer-#.#.js
├── test
│   └── test.js
├── work
│   └── lab-#.#.js
└── package.json
Node/npm basics
node [script.js]
npm install
npm install [specific package]

Recommended for you

Time based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webserviceTime based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webservice

Frans Rosén of detectify discusses SQL injection techniques through a SOAP webservice. He provides steps to create a proof of concept attack with as few requests as possible to find vulnerable storefronts. Examples are given of time-based SQL injection payloads using substring, ascii, and sleep functions to retrieve the username and potentially other information about the target host. A link is also provided to a paper on SQL injection optimization and obfuscation techniques.

security writeupbugbountysql injection
Ansible
AnsibleAnsible
Ansible

Introduction to Ansible. This is a tutorial based ppt, that can be used while conducting a workshop at any conference.

#anisble#configuration-managementdevops
Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!

A beginner's guide to annotation processing. In this talk that I gave at Droidcon Tel Aviv in 2016, I walk you through the process of building a custom annotation processor which mimics some of the behavior you may be familiar with from the popular Android library: Butter Knife.

annotation processingandroidcode generation
h?ps://gitpod.io/
h?ps://try-puppeteer.appspot.com/
Lab 0.1
Understanding Intent in JavaScript
Payload A is the first script of three found in an exploited dependency of npm
package event-stream.
Background
De-obfuscate payload-A.js and idenHfy how it is loading the second payload.
Goal
Lab 0.1
Understanding Intent in JavaScript
• Format your code with ⌘+⇧+P or ^+⇧+P to open command pale?e then
"Format Document"
• Rename variables by pressing F2 when cursor is over an idenHfier.
• There is a helper file that includes addiHonal encoded strings.

(The first and second strings in the helper file are beyond the scope of this lab.)
• process.env contains the environment variables at Hme of execuHon
Tips

Recommended for you

Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...

This document provides a summary of creating a custom annotation processor called "Soup Ladle" that allows for view binding in Android with the @Bind annotation. It discusses defining the @Bind annotation, extending the AbstractProcessor class to process the annotation, scanning code for @Bind fields and their parent classes, and generating SoupLadle.java files with binding methods for each parent class. The goal is to allow easy one-line view binding like SoupLadle.bind(this) for learning purposes and as a simpler alternative to libraries like ButterKnife.

mobile application developmentdroidconandroid
Practical Chaos Engineering
Practical Chaos EngineeringPractical Chaos Engineering
Practical Chaos Engineering

Practical Chaos Engineering will show how to start running chaos experiments in your infrastructure and will try to guide your through the principles of chaos.

chaos engineeringcloudkubernetes
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC

This document discusses building APIs with Swift, OpenAPI, and gRPC. It introduces protocol buffers for defining data structures, and gRPC for building APIs. It recommends using the gnostic tool to convert OpenAPI descriptions to protocol buffers for use with gRPC plugins. This allows building high-quality code generators in different languages by separating the generator from the API description parsing. The document provides examples of building gRPC APIs and clients in Swift.

grpcswiftprotocol buffers
Lab Series 1
ProgrammaHcally manipulaHng JavaScript
Lab 1.1
ProgrammaHcally extract logic from JavaScript
Common JavaScript best pracHces and bundlers produce code that has a
minimal public footprint, limiHng the ability to hook into exisHng logic.
Background
Use the Shif parser and code generator to read payload-A.js and extract its
e funcOon and export it as an unhex method in our node script.
Goal
Lab 1.1
Using parsers
parse(originalSource) ! Abstract Syntax Tree (AST)
codegen(AST) ! newSource
Lab 1.1
VariableDeclarationStatement
What is an AST?

Recommended for you

Code transformation With Spoon
Code transformation With SpoonCode transformation With Spoon
Code transformation With Spoon

Spoon is an open-source library that enables you to transform and analyze Java source code. Due to a complete and fine-grained Java metamodel, you can read and write the AST built by Spoon. In this talk, you'll see all strong concepts and API with an example. Then, you'll see how you can integrate this project in yours.

transformationspoonanalysis
React native
React nativeReact native
React native

React Native allows developers to build mobile apps using React with native platform capabilities. It uses native components instead of web views, making apps feel and perform like native ones. The document discusses what React Native is, how to set up a development environment, build a basic app, add libraries, handle common errors, and React Native fundamentals like components, styles, layout, events, and touch handling.

react nativemobile development
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...

Front-end development has an amazing assortment of libraries and tools, yet it can seem very complex and doest seem much fun. So we'll live code a ClojureScript application (with a bit of help from Git) and show how development doesn't have to be complex or slow. Through live evaluation, we can build a reactive, functional application. Why not take a look at a well designed language that uses modern functional & reactive concepts for building Front-End apps. You are going to have to trans-pile anyway, so why not use a language, libraries and tooling that is bursting with fun to use.

codemotion amsterdam 2017
Lab 1.1
VariableDeclaration
What is an AST?
Lab 1.1
VariableDeclarator
What is an AST?
Lab 1.1
What is an AST?
BindingIdentifier
LiteralStringExpression
Lab 1.1
What is an AST?

Recommended for you

Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this

- The document discusses some of the author's criticisms of Scala, including its use of implicit parameters to configure runtime behavior, and lack of good support for asynchronous programming. - The author proposes some workarounds, like annotating imports to avoid implicit conflicts, and patching the compiler to add more information to Future exceptions. However, the ideal solution would be language changes or improvements to asynchronous abstractions like Async. - Overall, the author argues that Scala is not ideal for some use cases like asynchronous programming, but provides some workarounds people can use in the meantime. The best solutions require changes to the language and standard library.

scalascalauaasync
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks

The document discusses and compares two popular ActionScript frameworks: PureMVC and Robotlegs. It provides an overview of why frameworks are used, describes some common design patterns implemented in frameworks, and highlights key features and strengths/weaknesses of PureMVC and Robotlegs.

as3frameworkpuremvc
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage

This document discusses how to test NodeJS applications using the Mocha testing framework, the Should assertion library, and Sinon for spies/stubs/mocks. It covers setting up Mocha and Should, writing synchronous and asynchronous tests, using hooks, the Should DSL for assertions, running and configuring tests, integrating Sinon, and measuring test coverage with node-jscoverage.

node.jsshouldsinon
Lab 1.1
What is an AST?
"Hello WOPRs"
Lab 1.1
ProgrammaHcally extract logic from JavaScript
Common JavaScript best pracHces and bundlers produce code that has a
minimal public footprint, limiHng the ability to hook into exisHng logic.
Background
Use the Shif parser and code generator to read payload-A.js and extract its
e funcOon and export it as an unhex method in our node script.
Goal
Lab 1.1
ProgrammaHcally extract logic from JavaScript
• Don't overthink it - you're just deeply accessing a property in an object.
• console.log() as you make your way down the tree, e.g.
console.log(tree.expressions[0]);
• Copy/paste payload-A.js into astexplorer.net for an interacHve UI
Tips
Lab 1.2
Resiliently extract logic from JavaScript
ExtracHng and manipulaHng JavaScript requires that the code be resilient to
changes in the input source.
Background
Use a traversal method to pick out the same funcHon from lab 1.1 by
inspecHng the AST node of the funcHon and idenHfying it by its shape or
a?ributes.
Goal

Recommended for you

Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine

This document discusses using various technologies on Google App Engine including JIQL, GaeVFS, RESTlets, scheduled tasks, JRuby on Rails, task queues, XMPP, and Clojure. JIQL emulates a relational database on App Engine's Bigtable datastore. GaeVFS provides a virtual filesystem on Bigtable. RESTlets make RESTful web services easy to implement in Java on App Engine. Scheduled tasks allow for background processing via cron jobs. JRuby on Rails provides a way to run Ruby on Rails applications on App Engine. Task queues allow for asynchronous background processing. XMPP enables instant messaging and peer-to-peer applications. Clojure can also be used

javaitcorkconference
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript

This document provides an overview of Clojurescript presented by John Stevenson. It discusses how Clojurescript provides a pragmatic approach to functional programming using immutable data structures and pure functions. It also describes how Clojurescript interfaces with popular JavaScript frameworks like React and how it can help manage complexity and state changes in web applications. Additionally, the document provides examples of Clojurescript libraries and tools and discusses ways to get started with the Clojurescript environment and ecosystem.

functional programmingwebclojure
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go WrongJDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong

It’s late 2016, so you probably have been using Java 8 goodies for a while: lambdas, Stream, Optional, new date API ‒ stuff which makes Java development much more pleasant. But the question is: do you know these tools well? I bet you said yes, because writing sweet Java 8 code is piece of cake ‒ you’re using efficient, parallel streams and many lambdas, so what could possibly go wrong? Let me put this straight: most probably you’re doing something wrong. In this talk I won’t actually try to prove that you don’t know what you’re doing, on the contrary ‒ I’ll try to help you be a better programmer by pointing out few mistakes you can make when writing Java 8 code (I know that because I made them all). I’ll also discuss couple common misconceptions regarding Stream and Optional and mention missing language features (also if there is a chance to see them in Java 9 or what library should you use instead). Last but not least, I’ll present you a number of lesser-known gems I found in deepest corners of JDK API, which, I hope, will make your life as a software developer a little bit easier.

Lab 1.2
Resiliently extract logic from JavaScript
• allNodes contains a list of all nodes in the AST.
• You can iterate over that list and check every node for properHes that
represent the node you want to target.
• You probably want to check if node.type === 'FunctionDeclaration'
• You can then check the funcHon name to make sure it is equal to 'e'
Tips
Lab 1.3
Rewrite JavaScript taking scope and context into account
RewriHng JavaScript requires tools that are aware of the enHre program's scope
and context.
Background
Use shift-scope to rename global variables "a" and "b" to "first" and
"second"
Goal
Analyzing Scope
Analyzing Scope
const scope = analyzeScope(AST)

Recommended for you

MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift

How to write CLI apps for macOS using swift, which packages to use, common challenges to overcome, how to structure your CLI app code.

swiftmacoscli
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...

Greg Anderson's slide deck from BADCamp 2016. Having a fine-tuned continuous integration environment is extremely valuable, even for small projects. Today, there is a wide variety of standalone projects and online Software-As-A-Service offerings that can super-streamline your everyday development tasks that can help you get your projects up and running like a pro. In this session, we'll look at how you can get the most out of: - GitHub source code repository - Packagist package manager for Composer - Travis CI continuous integration service - Coveralls code coverage service - Scrutinizer static analysis service - Box2 phar builder - PhpDocumentor api documentation generator - ReadTheDocs online documentation reader service - Composer scripts and projects for running local tests and builds

developmentphpdrupal
The future of server side JavaScript
The future of server side JavaScriptThe future of server side JavaScript
The future of server side JavaScript

The document discusses the future of server-side JavaScript. It provides reasons for using JavaScript on the server, including that it is the lingua franca of the web, allows for code reuse between server and client, and supports asynchronous programming well. It also discusses JavaScript engines, CommonJS modules and packages, environments like Node.js and RingoJS, and trends like wider adoption and cloud-based IDEs.

web developmentjavascriptapplication server
Analyzing Scope
Scope
! children
! type
! astNode
! variableList
Child scopes
Global / Script / FuncHon etc
The root node
The variables declared or
referenced in this scope
Analyzing Scope
const lookupTable = new ScopeLookup(scope)
const identifier = /* node from AST */
const lookup = lookupTable.variableMap.get(identifier)
Lab 1.3
Rewrite JavaScript taking scope and context into account
RewriHng JavaScript requires tools that are aware of the enHre program's scope
and context.
Background
Use shift-scope to rename global variables "a" and "b" to "first" and
"second"
Goal
Lab 1.3
Rewrite JavaScript taking scope and context into account
• The argument to lookupTable.variableMap.get() should be the
idenHfier node itself, not a string.
• There are variables already defined that reference the AST nodes.
• Each lookup returns a list of entries with declaraHons and references. You
need to change both declaraHons and references to fully rename an idenHfier.
Tips

Recommended for you

Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud

This document provides an agenda and summary for a workshop on developing MongoDB applications on OpenShift presented by Shekhar Gulati. The agenda includes getting started with OpenShift, developing a location-aware Java EE application using JAX-RS and CDI for REST services, and MongoDB for the database. The document discusses OpenShift, JAX-RS, CDI, and MongoDB concepts. It also outlines code samples and steps to create and deploy a sample Twitter-like application on OpenShift that supports creating, finding, and geo-searching statuses.

Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep

- Server applications written in Objective-C and GNUstep can take advantage of the GNUstep base libraries and Foundation framework to provide high-level object-oriented design and functionality while maintaining high performance comparable to C. - The GNUstep base libraries provide common classes for tasks like strings, collections, threading, notifications, and I/O that allow server code to be organized using object-oriented patterns. - Objective-C is well-suited for server applications because it is a strict superset of C, allowing seamless integration of C code and libraries, while also providing object-oriented features for high-level organization of server code.

Building Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn UstepBuilding Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn Ustep

- Server applications written in Objective-C and GNUstep-base can take advantage of the high-level object-oriented features of Objective-C while maintaining the performance and flexibility of C. - GNUstep-base provides the Foundation library, which includes classes for tasks like threading, networking, data storage and more that are useful for server applications. - Objective-C allows mixing C code for performance critical parts while organizing the overall application structure using object-oriented patterns supported by the GNUstep-base libraries.

objc
Lab Series 2
ProgrammaHcally controlling a browser
Lab Series 2
Notes:
The Puppeteer npm package downloads Chrome on
every install. If internet is flakey, download it once and
copy node_modules/puppeteer from one lab to
another
Lab 2.1
ProgrammaHcally control a browser with Puppeteer
Web applicaHon analysis needs to be completely automated, otherwise
everything depending on a manual step risks breaking when anything changes.
Background
Set up a base environment that controls Chrome with Puppeteer and nodejs.
Goal
What is Puppeteer?
Puppeteer is a nodejs library that provides a high-level API
to control Chrome over the DevTools Protocol.
Puppeteer runs headless by default, but can be configured
to run full (non-headless) Chrome or Chromium.

Recommended for you

20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy

- Lithium is an upcoming PHP framework that is lightweight and flexible - It uses MongoDB as its primary database and supports MySQL as well - The presentation covered the core functionality of Lithium including installation, models, controllers, views and provided examples of using it to build a blog application

li3phplithium
Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus

This All Things Open 2022 talk shows how to use current-gen WebAssembly to build complex applications out of components.

webassemblywasmapex
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving

This talk was given at AppSec California, January 2020. Credential stuffing and other automated attacks are evolving passed every defense thrown in their way. CAPTCHAs don't work, Fingerprints don't work, Magical AI-whatevers don't work. The value is just too great.

securityautomationcredential stuffing
Puppeteer API
puppeteer.launch();
puppeteer.connect();
browser
Browser instance
browser.pages();
browser.newPage();
page
( Tab )
Page instance
page.goto();
page.evaluate();
element
page.$();
page.$$();
Element instance
element.click();
element.type(…);
element.tap();

Recommended for you

How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019

Slides for talk given at PasswordsCon Sweden 2019. Credentials Stuffing is an automated attack that exploits users who reuse passwords by taking breached credentials and replaying them across sites.

credential stuffingcredential spillsowasp
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...

This document summarizes an analysis of an exploited NPM package called event-stream. It describes how an attacker gained control of the package and added malicious code that was downloaded by thousands of projects whenever their dependencies were updated. The malicious code stole cryptocurrency from wallets containing large amounts. It highlights the risks of supply chain attacks and emphasizes the importance of auditing dependencies, locking versions, and thinking carefully before adding new dependencies to avoid compromising entire projects and their users.

nodejsnpmsecurity
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...

Jarrod Overson presented on a supply chain attack that occurred in 2018 through the compromise of the event-stream Node.js package. An unauthorized developer gained commit access and introduced malicious code through new dependencies that was then installed by millions of users. The malware harvested cryptocurrency private keys from the Copay wallet app. While the community responded quickly, such attacks demonstrate vulnerabilities in open source software supply chains and dependency management that will continue to be exploited if not properly addressed through changes to practices and tooling.

nodejsnpmsecurity
Lab 2.1
ProgrammaHcally control a browser with Puppeteer
• The Puppeteer API is fantasHc : h?p://bit.ly/puppeteer-api
• You need to get a browser instance from puppeteer
• You need to get a page instance from browser
• You need to go to a url of your choice, e.g. h?ps://example.com
Tips
Lab 2.2
Intercept requests via the Chrome Devtools Protocol
IntercepHng, inspecHng, and modifying inbound and outbound communicaHon
is a criHcal part of any reverse engineering effort.
Background
Use the Chrome Devtools Protocol directly to intercept all Script resources,
log the URL to the terminal, and then conHnue the request.
Goal
What is Chrome Devtools Protocol?
The Chrome DevTools Protocol allows for tools to
instrument, inspect, debug and profile Chromium, Chrome
and other Blink-based browsers.
@jsoverson
http://bit.ly/chrome-devtools-protocol

Recommended for you

Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future

Deepfakes originally started as cheap costing but believable video effects and have expanded into AI-generated content of every format. This session dove into the state of deepfakes and how the technology highlights an exciting but dangerous future.

deepfakesmachine learningartificial intelligence
The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.

Jarrod Overson discusses the evolution of credential stuffing attacks and where they may go in the future. He summarizes that credential stuffing started as basic automated login attempts but has evolved through generations as defenses were put in place, such as CAPTCHAs and behavior analysis. The next generation involves more sophisticated imitation attacks that flawlessly emulate human behavior using real device fingerprints to blend in. Beyond credential stuffing, malware may start scraping user accounts and environments directly from infected machines. As defenses raise the cost of attacks, fraudsters will diversify methods to preserve the value of valid accounts and user data.

credential stuffingcredential spillsowasp
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle

OWASP RTP Presentation on Data breaches, credential spills, the lifespan of data, credential stuffing, the attack lifecycle, and what you can do to protect yourself or your users.

password securitycredential stuffingdata breaches
IniHaHng a CDP Session
const client = page.target().createCDPSession();
Sending commands
client.send(“command”);
client.send(“command”, {options…});
client.on(“event”, listener);
IntercepHng Network Traffic
(pseudo code)
send(“Network.enable”);
send(“Network.setRequestInterception”, patterns);
on(“Network.requestIntercepted”, (evt) => {
/* modify request or response */
send(
“Network.continueInterceptedRequest”,
request
)
})
Lab 2.2
Intercept requests via the Chrome Devtools Protocol
IntercepHng, inspecHng, and modifying inbound and outbound communicaHon
is a criHcal part of any reverse engineering effort.
Background
Use the Chrome Devtools Protocol directly to intercept all Script resources,
log the URL to the terminal, and then conHnue the request.
Goal

Recommended for you

The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security

QCon SF 2016 security talk about who uses data from massive breaches (like Yahoo, Target), what tools they use, and what damage they inflict.

securitybreachqconsf
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16

Shape Security analyzes 1.5 billion logins per week and protects 350 million user accounts. In 2016 alone, 1.6 billion credentials were leaked and sold or traded by criminals on dark web markets. Shape uses headless browsers like PhantomJS to automatically test leaked credentials on other sites, stopping over $1 billion in fraud losses in 2016. However, captchas intended to prevent automated attacks do not work and ruin the user experience.

javascriptwafflejsweb platform
Graphics Programming for Web Developers
Graphics Programming for Web DevelopersGraphics Programming for Web Developers
Graphics Programming for Web Developers

Talk given at Mozilla's first View Source Conference in Portland, 2015. Details out the parallels between graphics and game developments compared to traditional web development.

javascriptprogramminggames
Lab 2.2
Intercept requests via the Chrome Devtools Protocol
• The Puppeteer API is fantasHc : h?p://bit.ly/puppeteer-api
• This is purely in the Network domain
• Remind me to flip back to the pseudo-code if you're stuck.
Tips
Lab 2.3
Modify intercepted requests
Modifying intercepted requests requires recreaHng an enHre HTTP response
and passing it along as the original.
Background
Retrieve the original script body and append a `console.log()` statement to
the end of the script that simply logs a message.
Goal
IntercepHng Network Traffic
(pseudo code)
send(“Network.enable”);
send(“Network.setRequestInterception”, patterns);
on(“Network.requestIntercepted”, (evt) => {
send(
“Network.continueInterceptedRequest”,
request
)
})
const response =
send(“Network.getResponseBodyForInterception”, interceptionId);
Modifying a Response
(pseudo code)
const response =
send('Network.getResponseBodyForInterception', interceptionId);
const body = response.base64Encoded
? atob(response.body)
: response.body;
send('Network.continueInterceptedRequest', {
interceptionId,
rawResponse: btoa( /* Complete HTTP Response */)
});

Recommended for you

The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security

This document discusses the dark side of web security, including automated threats from bots and attackers. It notes that traditional security like flossing is difficult to measure effectiveness. It outlines the OWASP top 10 vulnerabilities and automated threats attackers use. While captchas are meant to stop bots, services have made bypassing captchas easier. If a site has value like money, data, or content, there is value in exploiting it. Detection of attacks is difficult as attackers use many proxies and fingerprints to avoid detection. Patching is not enough, and spikes in traffic from many IPs could indicate an attack.

automationaccount-takeovercaptcha
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST

This was a talk given at HTML5DevConf SF in 2015. Ever wanted to write your own Browserify or Babel? Maybe have an idea for something new? This talk will get you started understanding how to use a JavaScript AST to transform and generate new code.

astbabelshift-ast
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows

This document discusses ECMAScript 2015 (ES2015), also known as ES6. It provides examples of new ES2015 features like arrow functions, template literals, classes, and modules. It also discusses how to set up a development environment to use ES2015, including transpiling code to ES5 using Babel, linting with Eslint, testing with Mocha, and generating coverage reports with Istanbul. The document emphasizes that while ES2015 is fun to explore, proper tooling like linting and testing is needed for serious development. It concludes by noting ES2015 marks a transition and thanks the audience.

nodejses2015javascript
HTTP Requests & Responses
Lab 2.3
Modify intercepted requests
Modifying intercepted requests requires recreaHng an enHre HTTP response
and passing it along as the original.
Background
Retrieve the original script body and append a `console.log()` statement to
the end of the script that simply logs a message.
Goal
Lab 2.3
Modify intercepted requests
• Rely on the Chrome Devtools Protocol documentaHon : h?ps://bit.ly/chrome-
devtools-protocol
• What you add to each script is up to you, it's user choice as long as it is
observable.
• The last TODO requires reading the CDP documentaHon.
Tips
Final Lab
Meaningfully rewrite a script to intercept its access to browser APIs
IntercepHng a script's access to standard APIs allows you to guide its execuHon
in the direcHon you want without modifying its internals.
Background
Wrap the example site's script to intercept access to document.locaHon to
make the script think it is hosted elsewhere & inject code that exposes the
seed
Goal

Recommended for you

Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014

The document discusses achieving maintainability in code through examining code quality with linters, generating visual reports on metrics like complexity and coverage, and automating processes like builds, linting, and testing through tools like Grunt and Gulp. It emphasizes setting limits on metrics like complexity, enforcing code style through automation, and treating documentation as important as code.

code-coveragejavascriptyeoman
Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code

1) The document discusses achieving maintainability in code through analysis, automation, and enforcement of standards. 2) It recommends setting up linting, code coverage, and other analysis tools to examine code quality and automatically enforcing code style through build processes. 3) The key is to automate as many processes as possible like testing, linting, and documentation to make the code easy to work with and prevent issues from being introduced.

platoyeomanautomation
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014

Slides for the keynote given at QCon Sao Paulo 2014. Talk goes into the problems scaling Riot and how we've tried to solve them as well as what we've learned from the web and what lies in store next.

scaleasmjsspdy

More Related Content

What's hot

Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web Artisans
Windzoon Technologies
 
SSRF workshop
SSRF workshop SSRF workshop
SSRF workshop
Ivan Novikov
 
Zed Attack Proxy (ZAP)
Zed Attack Proxy (ZAP)Zed Attack Proxy (ZAP)
Zed Attack Proxy (ZAP)
JAINAM KAPADIYA
 
Monitoring Kafka w/ Prometheus
Monitoring Kafka w/ PrometheusMonitoring Kafka w/ Prometheus
Monitoring Kafka w/ Prometheus
kawamuray
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
juzten
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
Max Claus Nunes
 
Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite
jasonhaddix
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency
GreenD0g
 
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016
bugcrowd
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
Vikash Singh
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
Ganesh Samarthyam
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
Kengatharaiyer Sarveswaran
 
Web application security
Web application securityWeb application security
Web application security
Kapil Sharma
 
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programsAEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
Mikhail Egorov
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana
Arvind Kumar G.S
 
Owasp Top 10 A1: Injection
Owasp Top 10 A1: InjectionOwasp Top 10 A1: Injection
Owasp Top 10 A1: Injection
Michael Hendrickx
 
Nginx
NginxNginx
An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST
Ram Awadh Prasad, PMP
 
Time based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webserviceTime based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webservice
Frans Rosén
 
Ansible
AnsibleAnsible
Ansible
Rahul Bajaj
 

What's hot (20)

Laravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web ArtisansLaravel - The PHP Framework for Web Artisans
Laravel - The PHP Framework for Web Artisans
 
SSRF workshop
SSRF workshop SSRF workshop
SSRF workshop
 
Zed Attack Proxy (ZAP)
Zed Attack Proxy (ZAP)Zed Attack Proxy (ZAP)
Zed Attack Proxy (ZAP)
 
Monitoring Kafka w/ Prometheus
Monitoring Kafka w/ PrometheusMonitoring Kafka w/ Prometheus
Monitoring Kafka w/ Prometheus
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency
 
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Web application security
Web application securityWeb application security
Web application security
 
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programsAEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana
 
Owasp Top 10 A1: Injection
Owasp Top 10 A1: InjectionOwasp Top 10 A1: Injection
Owasp Top 10 A1: Injection
 
Nginx
NginxNginx
Nginx
 
An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST
 
Time based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webserviceTime based CAPTCHA protected SQL injection through SOAP-webservice
Time based CAPTCHA protected SQL injection through SOAP-webservice
 
Ansible
AnsibleAnsible
Ansible
 

Similar to How to Reverse Engineer Web Applications

Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!
Jason Feinstein
 
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
DroidConTLV
 
Practical Chaos Engineering
Practical Chaos EngineeringPractical Chaos Engineering
Practical Chaos Engineering
SIGHUP
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Tim Burks
 
Code transformation With Spoon
Code transformation With SpoonCode transformation With Spoon
Code transformation With Spoon
Gérard Paligot
 
React native
React nativeReact native
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
Codemotion
 
Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
Ruslan Shevchenko
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
Yuri Visser
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
mlilley
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
catherinewall
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
John Stevenson
 
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go WrongJDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
PROIDEA
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
Diego Freniche Brito
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Pantheon
 
The future of server side JavaScript
The future of server side JavaScriptThe future of server side JavaScript
The future of server side JavaScript
Oleg Podsechin
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud
Shekhar Gulati
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep
guest9efd1a1
 
Building Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn UstepBuilding Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn Ustep
wangii
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
Yusuke Ando
 

Similar to How to Reverse Engineer Web Applications (20)

Write code that writes code!
Write code that writes code!Write code that writes code!
Write code that writes code!
 
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...Write code that writes code! A beginner's guide to Annotation Processing - Ja...
Write code that writes code! A beginner's guide to Annotation Processing - Ja...
 
Practical Chaos Engineering
Practical Chaos EngineeringPractical Chaos Engineering
Practical Chaos Engineering
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
 
Code transformation With Spoon
Code transformation With SpoonCode transformation With Spoon
Code transformation With Spoon
 
React native
React nativeReact native
React native
 
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
 
Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
 
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go WrongJDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
JDD 2016 - Grzegorz Rozniecki - Java 8 What Could Possibly Go Wrong
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
 
The future of server side JavaScript
The future of server side JavaScriptThe future of server side JavaScript
The future of server side JavaScript
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep
 
Building Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn UstepBuilding Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn Ustep
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
 

More from Jarrod Overson

Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
Jarrod Overson
 
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving
Jarrod Overson
 
How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019
Jarrod Overson
 
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
Jarrod Overson
 
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Jarrod Overson
 
Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future
Jarrod Overson
 
The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.
Jarrod Overson
 
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle
Jarrod Overson
 
The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security
Jarrod Overson
 
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16
Jarrod Overson
 
Graphics Programming for Web Developers
Graphics Programming for Web DevelopersGraphics Programming for Web Developers
Graphics Programming for Web Developers
Jarrod Overson
 
The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security
Jarrod Overson
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
Jarrod Overson
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
Jarrod Overson
 
Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014
Jarrod Overson
 
Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code
Jarrod Overson
 
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014
Jarrod Overson
 
Managing JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - FluentManaging JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - Fluent
Jarrod Overson
 
Real World Web components
Real World Web componentsReal World Web components
Real World Web components
Jarrod Overson
 
Managing JavaScript Complexity
Managing JavaScript ComplexityManaging JavaScript Complexity
Managing JavaScript Complexity
Jarrod Overson
 

More from Jarrod Overson (20)

Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
 
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving
 
How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019
 
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
 
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
 
Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future
 
The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.
 
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle
 
The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security
 
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16
 
Graphics Programming for Web Developers
Graphics Programming for Web DevelopersGraphics Programming for Web Developers
Graphics Programming for Web Developers
 
The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
 
Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014
 
Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code
 
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014
 
Managing JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - FluentManaging JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - Fluent
 
Real World Web components
Real World Web componentsReal World Web components
Real World Web components
 
Managing JavaScript Complexity
Managing JavaScript ComplexityManaging JavaScript Complexity
Managing JavaScript Complexity
 

Recently uploaded

一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
一比一原版(london毕业证书)英国伦敦大学毕业证如何办理一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
taqyea
 
2023. Archive - Gigabajtos selfpublisher homepage
2023. Archive - Gigabajtos selfpublisher homepage2023. Archive - Gigabajtos selfpublisher homepage
2023. Archive - Gigabajtos selfpublisher homepage
Zsolt Nemeth
 
Common Challenges in UI UX Design and How Services Can Help.pdf
Common Challenges in UI UX Design and How Services Can Help.pdfCommon Challenges in UI UX Design and How Services Can Help.pdf
Common Challenges in UI UX Design and How Services Can Help.pdf
Serva AppLabs
 
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
ffg01100
 
Book dating , international dating phgra
Book dating , international dating phgraBook dating , international dating phgra
Book dating , international dating phgra
thomaskurtha9
 
very nice project on internet class 10.pptx
very nice project on internet class 10.pptxvery nice project on internet class 10.pptx
very nice project on internet class 10.pptx
bazukagaming6
 
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
taqyea
 
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
taqyea
 
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
taqyea
 
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
taqyea
 
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
taqyea
 
University of Otago degree offer diploma Transcript
University of Otago degree offer diploma TranscriptUniversity of Otago degree offer diploma Transcript
University of Otago degree offer diploma Transcript
ubufe
 
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
ffg01100
 
Steps involved in the implementation of EDI in a company
Steps involved in the implementation of EDI in a companySteps involved in the implementation of EDI in a company
Steps involved in the implementation of EDI in a company
sivaraman163206
 
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptxSlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
NandakumarP24
 
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
taqyea
 
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
taqyea
 
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
taqyea
 
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
taqyea
 
10th International Conference on Networks, Mobile Communications and Telema...
10th International Conference on Networks, Mobile Communications and   Telema...10th International Conference on Networks, Mobile Communications and   Telema...
10th International Conference on Networks, Mobile Communications and Telema...
ijp2p
 

Recently uploaded (20)

一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
一比一原版(london毕业证书)英国伦敦大学毕业证如何办理一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
一比一原版(london毕业证书)英国伦敦大学毕业证如何办理
 
2023. Archive - Gigabajtos selfpublisher homepage
2023. Archive - Gigabajtos selfpublisher homepage2023. Archive - Gigabajtos selfpublisher homepage
2023. Archive - Gigabajtos selfpublisher homepage
 
Common Challenges in UI UX Design and How Services Can Help.pdf
Common Challenges in UI UX Design and How Services Can Help.pdfCommon Challenges in UI UX Design and How Services Can Help.pdf
Common Challenges in UI UX Design and How Services Can Help.pdf
 
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
202254.com全网最高清影视香蕉影视,热门电影推荐,热门电视剧在线观看,免费电影,电影在线,在线观看。球华人在线電視劇,免费点播,免费提供最新高清的...
 
Book dating , international dating phgra
Book dating , international dating phgraBook dating , international dating phgra
Book dating , international dating phgra
 
very nice project on internet class 10.pptx
very nice project on internet class 10.pptxvery nice project on internet class 10.pptx
very nice project on internet class 10.pptx
 
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)英国爱丁堡大学毕业证如何办理
 
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
一比一原版(lu毕业证书)英国拉夫堡大学毕业证如何办理
 
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
 
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
一比一原版(ukc毕业证书)英国肯特大学毕业证如何办理
 
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
一比一原版(kcl毕业证书)英国伦敦国王学院毕业证如何办理
 
University of Otago degree offer diploma Transcript
University of Otago degree offer diploma TranscriptUniversity of Otago degree offer diploma Transcript
University of Otago degree offer diploma Transcript
 
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
202254.com免费观看《长相思第二季》免费观看高清,长相思第二季线上看,《长相思第二季》最新电视剧在线观看,杨紫最新电视剧
 
Steps involved in the implementation of EDI in a company
Steps involved in the implementation of EDI in a companySteps involved in the implementation of EDI in a company
Steps involved in the implementation of EDI in a company
 
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptxSlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
SlideEgg_200767-ICC Mens T20 World Cup 2024.pptx
 
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
一比一原版美国休斯敦大学毕业证(uh毕业证书)如何办理
 
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
一比一原版(bristol毕业证书)英国布里斯托大学毕业证如何办理
 
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
一比一原版(brunel毕业证书)英国布鲁内尔大学毕业证如何办理
 
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
一比一原版澳洲巴拉特大学毕业证(utas毕业证书)如何办理
 
10th International Conference on Networks, Mobile Communications and Telema...
10th International Conference on Networks, Mobile Communications and   Telema...10th International Conference on Networks, Mobile Communications and   Telema...
10th International Conference on Networks, Mobile Communications and Telema...
 

How to Reverse Engineer Web Applications

  • 1. Reverse Engineer Web Applications How to
  • 2. First things first Prerequisites • node.js ( web tools are made with node first ) • npm ( comes with node ) Nice-to-haves • Visual Studio code ( or suitable code editor ) • git ( because it's be?er than cvs )
  • 3. First things first Lab repository h5ps://github.com/jsoverson/workshop-reverse-engineering -or- Zipfile: h5p://bit.ly/reveng-webapps
  • 4. Reverse Engineer Web Applications How to
  • 5. Challenge #1 1. Web applica,ons have grown extremely complex. https://github.com/jsoverson/workshop-reverse-engineering
  • 7. Web 101 GET / HTTP/1.1 Host: www.google.com Connection: keep-alive User-Agent: Chrome/72.0.3626.96 Safari/537.36 (…) HTTP/1.1 200 OK Date: Tue, 19 Feb 2019 21:34:08 GMT Content-Type: text/html Content-Length: 1932 <!doctype HTML>(…) https://github.com/jsoverson/workshop-reverse-engineering
  • 9. Challenge #2 1. Web applica,ons have grown extremely complex. 2. Limited ability to run old versions of resources or use old APIs. https://github.com/jsoverson/workshop-reverse-engineering
  • 10. 99% of websites assume connecHvity https://github.com/jsoverson/workshop-reverse-engineering
  • 11. Challenge #3 1. Web applica,ons have grown extremely complex. 2. Limited ability to run old versions of resources or use old APIs. 3. Web site resources can change frequently. https://github.com/jsoverson/workshop-reverse-engineering
  • 14. Challenge #4 1. Web applica,ons have grown extremely complex. 2. Limited ability to run old versions of resources or use old APIs. 3. Web sites and APIs can change frequently. 4. Web browsers change frequently. https://github.com/jsoverson/workshop-reverse-engineering
  • 15. A year of Chrome A year of FireFox https://github.com/jsoverson/workshop-reverse-engineering
  • 16. Challenge #5 1. Web applica,ons have grown extremely complex. 2. Limited ability to run old versions of resources or use old APIs. 3. Web sites and APIs can change frequently. 4. Web browsers change frequently. 5. Actual aDackers are leading to more effec,ve countermeasures. https://github.com/jsoverson/workshop-reverse-engineering
  • 17. Website a?acks are a serious problem >3 billion a5acks in 1 week for 1 customer on 1 page https://github.com/jsoverson/workshop-reverse-engineering
  • 18. And have an industry around protecHng them https://github.com/jsoverson/workshop-reverse-engineering
  • 19. And have an industry around protecHng them That's Me! https://github.com/jsoverson/workshop-reverse-engineering
  • 20. So how do you hack web apps?
  • 21. 1. Drive the browser programmaHcally 2. Simulate and intercept "system" calls 3. Reuse as much applicaHon code as possible
  • 22. Lab work Lab 0 Lab 1 Lab 2 1. ExtracHng logic 2. ExtracHng logic resiliently 3. Transforming with scope awareness 1. AutomaHng a browser 2. IntercepHng requests 3. Modifying responses 4. RewriHng JS on the fly with a mocked environment 1. Understanding Intent
 in JavaScript
  • 23. Lab Format lab-#.#/ ├── answer │   └── answer-#.#.js ├── test │   └── test.js ├── work │   └── lab-#.#.js └── package.json
  • 24. Node/npm basics node [script.js] npm install npm install [specific package]
  • 27. Lab 0.1 Understanding Intent in JavaScript Payload A is the first script of three found in an exploited dependency of npm package event-stream. Background De-obfuscate payload-A.js and idenHfy how it is loading the second payload. Goal
  • 28. Lab 0.1 Understanding Intent in JavaScript • Format your code with ⌘+⇧+P or ^+⇧+P to open command pale?e then "Format Document" • Rename variables by pressing F2 when cursor is over an idenHfier. • There is a helper file that includes addiHonal encoded strings.
 (The first and second strings in the helper file are beyond the scope of this lab.) • process.env contains the environment variables at Hme of execuHon Tips
  • 29. Lab Series 1 ProgrammaHcally manipulaHng JavaScript
  • 30. Lab 1.1 ProgrammaHcally extract logic from JavaScript Common JavaScript best pracHces and bundlers produce code that has a minimal public footprint, limiHng the ability to hook into exisHng logic. Background Use the Shif parser and code generator to read payload-A.js and extract its e funcOon and export it as an unhex method in our node script. Goal
  • 31. Lab 1.1 Using parsers parse(originalSource) ! Abstract Syntax Tree (AST) codegen(AST) ! newSource
  • 35. Lab 1.1 What is an AST? BindingIdentifier LiteralStringExpression
  • 36. Lab 1.1 What is an AST?
  • 37. Lab 1.1 What is an AST? "Hello WOPRs"
  • 38. Lab 1.1 ProgrammaHcally extract logic from JavaScript Common JavaScript best pracHces and bundlers produce code that has a minimal public footprint, limiHng the ability to hook into exisHng logic. Background Use the Shif parser and code generator to read payload-A.js and extract its e funcOon and export it as an unhex method in our node script. Goal
  • 39. Lab 1.1 ProgrammaHcally extract logic from JavaScript • Don't overthink it - you're just deeply accessing a property in an object. • console.log() as you make your way down the tree, e.g. console.log(tree.expressions[0]); • Copy/paste payload-A.js into astexplorer.net for an interacHve UI Tips
  • 40. Lab 1.2 Resiliently extract logic from JavaScript ExtracHng and manipulaHng JavaScript requires that the code be resilient to changes in the input source. Background Use a traversal method to pick out the same funcHon from lab 1.1 by inspecHng the AST node of the funcHon and idenHfying it by its shape or a?ributes. Goal
  • 41. Lab 1.2 Resiliently extract logic from JavaScript • allNodes contains a list of all nodes in the AST. • You can iterate over that list and check every node for properHes that represent the node you want to target. • You probably want to check if node.type === 'FunctionDeclaration' • You can then check the funcHon name to make sure it is equal to 'e' Tips
  • 42. Lab 1.3 Rewrite JavaScript taking scope and context into account RewriHng JavaScript requires tools that are aware of the enHre program's scope and context. Background Use shift-scope to rename global variables "a" and "b" to "first" and "second" Goal
  • 44. Analyzing Scope const scope = analyzeScope(AST)
  • 45. Analyzing Scope Scope ! children ! type ! astNode ! variableList Child scopes Global / Script / FuncHon etc The root node The variables declared or referenced in this scope
  • 46. Analyzing Scope const lookupTable = new ScopeLookup(scope) const identifier = /* node from AST */ const lookup = lookupTable.variableMap.get(identifier)
  • 47. Lab 1.3 Rewrite JavaScript taking scope and context into account RewriHng JavaScript requires tools that are aware of the enHre program's scope and context. Background Use shift-scope to rename global variables "a" and "b" to "first" and "second" Goal
  • 48. Lab 1.3 Rewrite JavaScript taking scope and context into account • The argument to lookupTable.variableMap.get() should be the idenHfier node itself, not a string. • There are variables already defined that reference the AST nodes. • Each lookup returns a list of entries with declaraHons and references. You need to change both declaraHons and references to fully rename an idenHfier. Tips
  • 49. Lab Series 2 ProgrammaHcally controlling a browser
  • 50. Lab Series 2 Notes: The Puppeteer npm package downloads Chrome on every install. If internet is flakey, download it once and copy node_modules/puppeteer from one lab to another
  • 51. Lab 2.1 ProgrammaHcally control a browser with Puppeteer Web applicaHon analysis needs to be completely automated, otherwise everything depending on a manual step risks breaking when anything changes. Background Set up a base environment that controls Chrome with Puppeteer and nodejs. Goal
  • 52. What is Puppeteer? Puppeteer is a nodejs library that provides a high-level API to control Chrome over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.
  • 57. Lab 2.1 ProgrammaHcally control a browser with Puppeteer • The Puppeteer API is fantasHc : h?p://bit.ly/puppeteer-api • You need to get a browser instance from puppeteer • You need to get a page instance from browser • You need to go to a url of your choice, e.g. h?ps://example.com Tips
  • 58. Lab 2.2 Intercept requests via the Chrome Devtools Protocol IntercepHng, inspecHng, and modifying inbound and outbound communicaHon is a criHcal part of any reverse engineering effort. Background Use the Chrome Devtools Protocol directly to intercept all Script resources, log the URL to the terminal, and then conHnue the request. Goal
  • 59. What is Chrome Devtools Protocol? The Chrome DevTools Protocol allows for tools to instrument, inspect, debug and profile Chromium, Chrome and other Blink-based browsers.
  • 61. IniHaHng a CDP Session const client = page.target().createCDPSession();
  • 63. IntercepHng Network Traffic (pseudo code) send(“Network.enable”); send(“Network.setRequestInterception”, patterns); on(“Network.requestIntercepted”, (evt) => { /* modify request or response */ send( “Network.continueInterceptedRequest”, request ) })
  • 64. Lab 2.2 Intercept requests via the Chrome Devtools Protocol IntercepHng, inspecHng, and modifying inbound and outbound communicaHon is a criHcal part of any reverse engineering effort. Background Use the Chrome Devtools Protocol directly to intercept all Script resources, log the URL to the terminal, and then conHnue the request. Goal
  • 65. Lab 2.2 Intercept requests via the Chrome Devtools Protocol • The Puppeteer API is fantasHc : h?p://bit.ly/puppeteer-api • This is purely in the Network domain • Remind me to flip back to the pseudo-code if you're stuck. Tips
  • 66. Lab 2.3 Modify intercepted requests Modifying intercepted requests requires recreaHng an enHre HTTP response and passing it along as the original. Background Retrieve the original script body and append a `console.log()` statement to the end of the script that simply logs a message. Goal
  • 67. IntercepHng Network Traffic (pseudo code) send(“Network.enable”); send(“Network.setRequestInterception”, patterns); on(“Network.requestIntercepted”, (evt) => { send( “Network.continueInterceptedRequest”, request ) }) const response = send(“Network.getResponseBodyForInterception”, interceptionId);
  • 68. Modifying a Response (pseudo code) const response = send('Network.getResponseBodyForInterception', interceptionId); const body = response.base64Encoded ? atob(response.body) : response.body; send('Network.continueInterceptedRequest', { interceptionId, rawResponse: btoa( /* Complete HTTP Response */) });
  • 69. HTTP Requests & Responses
  • 70. Lab 2.3 Modify intercepted requests Modifying intercepted requests requires recreaHng an enHre HTTP response and passing it along as the original. Background Retrieve the original script body and append a `console.log()` statement to the end of the script that simply logs a message. Goal
  • 71. Lab 2.3 Modify intercepted requests • Rely on the Chrome Devtools Protocol documentaHon : h?ps://bit.ly/chrome- devtools-protocol • What you add to each script is up to you, it's user choice as long as it is observable. • The last TODO requires reading the CDP documentaHon. Tips
  • 72. Final Lab Meaningfully rewrite a script to intercept its access to browser APIs IntercepHng a script's access to standard APIs allows you to guide its execuHon in the direcHon you want without modifying its internals. Background Wrap the example site's script to intercept access to document.locaHon to make the script think it is hosted elsewhere & inject code that exposes the seed Goal